【发布时间】:2013-07-10 09:15:00
【问题描述】:
我遇到了内存泄漏问题,它与类中的结构数组有关(不确定它们在类中是否重要)。当我在结构上调用 delete 时,内存不会被清除。当我对 int 和 dbl 使用完全相同的进程时,它可以正常工作并按应有的方式释放内存。
我创建了非常简单的示例,它们可以正常工作,因此它与代码中的其他内容相关,但我不确定那可能是什么。我从来没有遇到任何错误,并且代码可以正确执行。但是,分配/释放是循环进行的,因此内存使用量不断上升。
换句话说,这里是问题的总结:
struct myBogusStruct {
int bogusInt1, bogusInt2;
};
class myBogusClass {
public:
myBogusStruct *bogusStruct;
};
void main(void) {
int i, arraySize;
double *bogusDbl;
myBogusClass bogusClass;
// arraySize is read in from an input file
for(i=0;i<100;i++) {
bogusDbl = new double[arraySize];
bogusClass.bogusStruct = new myBogusStruct[arraySize];
// bunch of other code
delete [] bogusDbl; // this frees memory
delete [] bogusClass.bogusStruct; // this does not free memory
}
}
当我删除一堆其他代码时,两个删除行都可以正常工作。但是,当它在那里时,第二个删除行什么也不做。同样,我从来没有从代码中得到任何错误,只是内存泄漏。此外,如果我将 arraySize 替换为 5000 之类的固定数字,则两个删除行都可以正常工作。
我不确定从哪里开始查找 - 什么可能导致删除行不起作用?
【问题讨论】:
标签: c++ struct delete-operator