我有以下代码片段:
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)
这段代码会产生内存泄漏吗?
不,它有未定义的行为,这更糟糕.
我必须使用:
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)