• 5958阅读
  • 5回复

[提问]请教关于QT中New BYTE内存释放的问题 [复制链接]

上一主题 下一主题
离线masuz
 

只看楼主 倒序阅读 楼主  发表于: 2016-09-18
我通过 new BYTE[szSize]的方式创建了struct指针,然后把它们加入QList,当整个对象释放的时候,再遍历QList逐一delete指针,但是每次释放到第2个指针对象时均报以下错误
HEAP[xxx.exe]: Invalid address specified to RtlValidateHeap( 000000FD6A3E0000, 000000FD7367C330 )
代码如下:
  1. // XObject.h
  2. typedef struct _MEM_INFO
  3. {
  4.     DWORD Index;
  5.     UINT Type;
  6.     char Info[INFO_SIZE+1];
  7.     ...
  8. } MEM_INFO, *P_MEM_INFO;
  9. typeof struct _STRUCT_TEST
  10. {
  11.     P_MEM_INFO pMemInfo;
  12.     ...
  13. }STRUCT_TEST;
  14. ...
  15. class XObject            //XObject 不是继承自 QObject!
  16. {
  17. private:
  18.     QList<STRUCT_TEST> testList;
  19. ...
  20. };
  21. // XObject.cpp
  22. void XObject::Create()
  23. {
  24.     for(int i=0;i<10;i++){
  25.         P_MEM_INFO pInfo = (P_MEM_INFO) new BYTE[sizeOfMeminfo];
  26.         ...
  27.         STRUCT_TEST test;
  28.         test.pMemInfo = pInfo;
  29.         infoList.append(test);
  30.     }
  31.     ...
  32. }
  33. // 析构
  34. XObject::~XObject()
  35. {
  36.     for(int i=0;i<infoList.length();++i){
  37.         STRUCT_TEST *pTest = &(infoList[i]);
  38.         if(pTest->pMemInfo){
  39.             delete pTest->pMemInfo; // i == 1 时出错:HEAP[xxx.exe]: Invalid address specified to RtlValidateHeap( 000000FD6A3E0000, 000000FD7367C330 )
  40.             pTest->pMemInfo = NULL;
  41.         }
  42.     }
  43. }


请问上述情况该如何处理?是不是我的使用方式有问题?谢谢!
QTer
离线dbzhang800

只看该作者 1楼 发表于: 2016-09-18
你用new [] 申请的数组,必须要用 delete [] 来删除相应的数组
离线masuz

只看该作者 2楼 发表于: 2016-09-18
回 dbzhang800 的帖子
dbzhang800:你用new [] 申请的数组,必须要用 delete [] 来删除相应的数组 (2016-09-18 13:30) 

好的,我试试。
QTer
离线masuz

只看该作者 3楼 发表于: 2016-09-18
回 masuz 的帖子
masuz:好的,我试试。 (2016-09-18 13:43) 

你好!我试了用 delete[] 还是一样的出错。估计不是这个问题...
QTer
离线masuz

只看该作者 4楼 发表于: 2016-09-18
回 dbzhang800 的帖子
dbzhang800:你用new [] 申请的数组,必须要用 delete [] 来删除相应的数组 (2016-09-18 13:30) 

你好!我试了用 delete[] 还是一样的出错。估计不是这个问题...
QTer
离线flfw1314

只看该作者 5楼 发表于: 2016-09-24
   test.pMemInfo = pInfo; 这段改下:for(int iDex=0;iDex<sizeOfMeminfo;iDex++){
test.pMemInfo[iDex] = pInfo[iDex];
}
析构函数也改下:delete [] pTest->pMemInfo。这样试试
走吧。。。。不管往哪里走
快速回复
限100 字节
 
上一个 下一个