c++ - 如何删除函数返回的数组

标签 c++ arrays memory heap-memory

我是 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/

相关文章:

django - 我可以在不使用 RAM 的情况下通过 HTML 表单将大图像上传到我的服务器吗?

c++ - 异常调用后是否保证 std::call_once 的线程通知

Javascript - 总结对象数组中出现的产品的数量

java - Camel sql存储java,无法输入数组作为oracle存储过程的输入参数

arrays - 变量零初始化会降低性能吗?

iOS:使用 "malloc"自动释放分配的内存?

R split() 函数大小增加问题

c++ - 结构中成员的默认值

c++ - 如何使用混合类型的 c++ 结构并只将一些值传递给 OpenGL?

c++ - 测试模板参数是否相等