我是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。我只是不确定如何删除数组,因为我需要在主函数中使用它们,所以我无法在foo函数中删除它们,但是之后如何删除它们呢?我试着只是删除someArray
,但是从该行用完的内存arrayToReturn[i] = new int[2]
永远不会被释放。
希望这是有道理的,如果这是一个愚蠢的问题,我们深表歉意,并感谢您的阅读!
对于初学者,您必须按照与分配相反的顺序删除指针。
您可以编写一个可以通过以下方式完成任务的函数
void free( int **array, int sizeOfArray )
{
for ( int i = 0; i < sizeOfArray; i++ )
{
delete [] array[i];
}
delete [] array;
}
或者甚至可以定义为
void free( int ** &array, int sizeOfArray )
{
for ( int i = 0; i < sizeOfArray; i++ )
{
delete [] array[i];
}
delete [] array;
array = nullptr;
}
您可以使用标std::vector
头中声明的标准类来代替自己分配和释放内存<vector>
例如,您的数组可以定义为
std::vector<std::vector<int>> array( sizeOfArray, std::vector<int>( 2 ) );
在这种情况下,您不必担心释放内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句