c++ - 如何在不导致内存泄漏的情况下用另一个动态数组替换一个动态数组?

标签 c++ pointers dynamic memory-leaks

这是一个简单的问题,我是初学者,但我想确认一下。

假设我有一个类对象 int * data,它指向一个包含 5 个整数的数组。假设我有一个函数可以用 5 个参数替换数据,如下所示。

void replaceData(int a, int b, int c, int d, int e){
    int * temp = new int[5];

    temp[0] = a;
    temp[1] = b;
    temp[2] = c;
    temp[3] = d;
    temp[4] = e;

    data = temp;           
}

我担心这会导致内存泄漏,因为如果数据中已经有 5 个整数,它们仍会四处 float 。我很想通过以下方式更改它以避免这种情况:

void replaceData(int a, int b, int c, int d, int e){
    int * temp = new int[5];

    temp[0] = a;
    temp[1] = b;
    temp[2] = c;
    temp[3] = d;
    temp[4] = e;

    delete data;     //would this prevent a memory leak? 
    data = temp;
    temp = 0;           
}

非常感谢您的投入!

最佳答案

如果 data 的分配方式与分配 temp 的方式相同,那么是的,您需要在修改指针之前先释放旧数组 - 否则您将有内存泄漏。

请注意,如果您分配一个数组 (new int[5]),那么您必须像这样释放该数组:

delete[] data;

此外,最好使用像 std::vector 这样的 STL 容器,而不是手动分配数组,因为所有内存管理都已为您处理。

关于c++ - 如何在不导致内存泄漏的情况下用另一个动态数组替换一个动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18994370/

相关文章:

javascript - 带有新 Google Chart API 的动态 map 标记图标?

ios - Firebase 动态链接在 iOS 上不起作用

android - 如何在 PhoneGap 中加载动态内容?

C++ - union 函数调用会导致内存泄漏吗

c++ - 命名空间 'u16string' 中没有名为 'std' 的类型

c++ - 仅从另一个类创建类/句柄

c - 对于我的 C 代码来说,构造一个二叉搜索树并在其侧面打印该树没有打印任何内容?

c++ - 嵌套 for 循环以迭代到 2 的幂

c++ - 这种删除指针的行为正常吗?

c - C 中字符串前的 "*"是什么意思?