我有以下代码工作正常,除了我不确定我是否需要删除 int main()
中的 returned_array
指针或者它是否自动删除.我猜它不会自动删除,并假设我应该在 cout
完成后使用 delete returned_array;
。有什么建议吗?
#include <iostream>
double* pass_return_array(double passed[])
{
double* returned_array = new double[3];
for(int index = 0; index < 3; index++)
returned_array[index] = passed[index];
return returned_array;
}
int main()
{
double passed[3];
double* returned_array;
for(int index = 0; index < 3; index++)
passed[index] = index + 100;
returned_array = pass_return_array(passed);
for(int index = 0; index < 3; index++)
std::cout<<returned_array[index]<<std::endl;
return 0;
}
最佳答案
你是对的:你在函数中创建了数组,你也负责它的释放。您应该在不再需要它时立即调用 delete[] returned_array;
。
请注意,操作系统总是在程序终止时清除程序分配的所有资源,因此不会有任何系统范围内存泄漏。但是将解除分配留给操作系统是一种非常糟糕的做法,您应该始终解除分配您分配的所有资源(并且包括其他类型的东西 - 例如文件或画笔的句柄)。
考虑改用 std::vector
或 std::array
- 如果用作简单的局部变量,它们将处理它们分配的内存,而你不会'不必记住它。这就是 C++ 在工作中的强大之处:)
关于c++ - 这会导致内存泄漏,从函数返回数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16535118/