我是 C++ 的新手,我遇到了一个小的内存泄漏问题。我的程序结构非常简单,如下所示,尽管我省略了与问题无关的部分。
int** foo(int sizeOfArray){
int** arrayToReturn = new int*[sizeOfArray];
for (int i = 0; i < sizeOfArray; i++) {
arrayToReturn[i] = new int[2];
}
return arrayToReturn;
}
int main() {
a = someNumber; // 'a' can be any value ( < 64)
int** someArray = foo(int a);
// Do stuff with someArray
}
所以本质上,它调用一个返回数组数组的函数。我的问题是,当我的程序调用这个函数数千次时,它们会导致内存泄漏,因为因为我使用的是 NEW,所以我需要使用 delete。我只是不确定如何删除数组,因为我需要在 main 函数中使用它们,所以我无法在函数 foo 中删除它们,但之后如何删除它们?我尝试只删除 someArray
,但是 arrayToReturn[i] = new int[2]
行用完的内存永远不会被释放。
希望这是有道理的,如果这是一个愚蠢的问题,我很抱歉,感谢阅读!
最佳答案
要完全删除数组,包括其中的子数组,您可以执行以下操作:
// Assuming we have an array called 'array'
int** array = foo(bar);
// Iterate through all the sub-arrays and delete them
for (int i = 0; i < sizeOfArray; i++) {
delete [] array[i];
}
// Delete the primary array
delete [] array;
此代码存在一些样式问题,有些人可能会试图告诉您永远不要使用原始指针,但我只是想以一种直截了当的方式为您回答这个问题。
这基本上与您用于创建数组的操作顺序相反。先创建外层数组,然后遍历创建子数组,删除需要先删除子数组,再删除最外层数组。
关于c++ - 如何删除函数返回的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40498554/