c++ - 这会导致内存泄漏,从函数返回数组吗?

标签 c++ arrays pointers memory-leaks return

我有以下代码工作正常,除了我不确定我是否需要删除 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::vectorstd::array - 如果用作简单的局部变量,它们将处理它们分配的内存,而你不会'不必记住它。这就是 C++ 在工作中的强大之处:)

关于c++ - 这会导致内存泄漏,从函数返回数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16535118/

相关文章:

c++ - 在 C++ 中从文件打印二维数组

将数组转换为 memcpy 的指针

c++ - 将结构指针传递给函数

c++ - C++ 中的本地化

C++ 读取文件

php - 无法从 PHP 文件中解码 JSON

arrays - 在Lua上读取文件

pointers - 防止 F# 中的垃圾收集器移动对象

c++ - 我正在尝试从 C++ 中的一个句子中打印单词,但它给了我段错误(核心转储)

c++ - OID_802_11_BSSID_LIST 的 DeviceIoControl 错误 87