c++ - 在同一个指针上调用 new [] 两次而不调用 delete [] 是否会导致内存泄漏?

标签 c++ memory-leaks

我听说当你使用“new”时,你通常应该“删除”,但是当我运行一个简单的测试程序(如下)时,我为 arraySize 或 numLoops 设置的数字似乎没有什么区别.这会导致内存泄漏吗?

#include <iostream>

int main()
{
    double *array;
    const int arraySize = 100000;
    const int numLoops = 100000;

    for (int i = 0; i < numLoops; i++)
    {
        // do I need to call "delete [] array;" here?
        array = new double[arraySize];
    }

    int x;
    std::cin >> x; // pause the program to view memory consumption

    delete [] array;

    return 0;
}

最佳答案

不,这还不够。

每次调用 newnew[] 时,都会分配一些内存,并给出该内存的地址(以便能够使用它).每一 block 内存最终都必须被deleted(或delete[]d)。

您将该地址存储在 array 中,但随后在下一次迭代中立即覆盖它。因此,您无法删除 - 分配给您的所有内存片段。因此你有内存泄漏。

关于c++ - 在同一个指针上调用 new [] 两次而不调用 delete [] 是否会导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979776/

相关文章:

c++ - 隔离堆栈粉碎错误的工具

c++ - boost::asio::io_service::在多个线程中运行

java - openCL并崩溃,有没有更好的方法来查找内存泄漏? (JOCL)

c++ - 依赖于操作系统的 C++ 内存泄漏?

c++ - 如何在C++中返回一个数组

java - 我需要清理 Rhino ScriptableObject 实例吗?

tomcat - 无法取消部署 Tomcat 7 中的 Web 应用程序

c++ - libjpeg 的输出是否始终为 RGB(或单色图像的亮度)?

c++ - 随机二叉树中的插入函数

由 tglman 编写的 C++ OrientDB 库