是否在同一指针上调用new []两次而不调用之间的delete []导致内存泄漏?

Ant*_*ony 1 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;
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 9

不,这还不够.

每次调用newnew[]分配一些内存时,您将获得该内存的地址(以便能够使用它).每段记忆最终必须是deleted(或delete[]d).

您正在存储该地址array,但在下一次迭代时会立即覆盖它.因此,您无法delete分配已分配的所有内存.因此,您有内存泄漏.