以下代码片段中是否有内存泄漏?

use*_*678 2 c++ memory-leaks

我有以下代码片段:

int nWidth = 10;
int *pData = new int[nWidth];
//I do something here
//then I free memory by:
delete pData;
Run Code Online (Sandbox Code Playgroud)

这段代码会产生内存泄漏吗?我必须使用:

delete[] pData;
Run Code Online (Sandbox Code Playgroud)

Pet*_*ker 13

如果不使用,delete[] pData则行为未定义.可能导致内存泄漏,可能导致程序崩溃,可能运行得很好,直到您为最重要的客户演示程序.


Mik*_*our 7

这段代码会产生内存泄漏吗?

不,它有未定义的行为,这更糟糕.

我必须使用: delete[] pData;

是的,new[]必须释放所有分配的内存delete[].但是,如果提前返回或异常阻止程序到达删除表达式,它仍将产生内存泄漏.

除非你做一些不寻常的事情,否则很少需要明确管理内存.在这种情况下,标准库提供了方便的动态数组类型:

#include <vector>

std::vector<int> data(nWidth);
// Do something here.
// Memory is freed automatically when data goes out of scope.
Run Code Online (Sandbox Code Playgroud)