我遇到了内存泄漏问题,它与类中的结构数组有关(不确定它们在类中是否重要)。当我在结构上调用 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 之类的固定数字,那么两个删除行都可以正常工作。
我不确定从哪里开始寻找 - 什么可能导致删除行不起作用?