我通过 new BYTE[szSize]的方式创建了struct指针,然后把它们加入
QList,当整个对象释放的时候,再遍历QList逐一delete指针,但是每次释放到第2个
指针对象时均报以下
错误:
HEAP[xxx.exe]: Invalid address specified to RtlValidateHeap( 000000FD6A3E0000, 000000FD7367C330 )
代码如下:
- // XObject.h
- typedef struct _MEM_INFO
- {
- DWORD Index;
- UINT Type;
- char Info[INFO_SIZE+1];
- ...
- } MEM_INFO, *P_MEM_INFO;
- typeof struct _STRUCT_TEST
- {
- P_MEM_INFO pMemInfo;
- ...
- }STRUCT_TEST;
- ...
- class XObject //XObject 不是继承自 QObject!
- {
- private:
- QList<STRUCT_TEST> testList;
- ...
- };
- // XObject.cpp
- void XObject::Create()
- {
- for(int i=0;i<10;i++){
- P_MEM_INFO pInfo = (P_MEM_INFO) new BYTE[sizeOfMeminfo];
- ...
- STRUCT_TEST test;
- test.pMemInfo = pInfo;
- infoList.append(test);
- }
- ...
- }
- // 析构
- XObject::~XObject()
- {
- for(int i=0;i<infoList.length();++i){
- STRUCT_TEST *pTest = &(infoList[i]);
- if(pTest->pMemInfo){
- delete pTest->pMemInfo; // i == 1 时出错:HEAP[xxx.exe]: Invalid address specified to RtlValidateHeap( 000000FD6A3E0000, 000000FD7367C330 )
- pTest->pMemInfo = NULL;
- }
- }
- }
请问上述情况该如何处理?是不是我的使用方式有
问题?谢谢!