我使用Visual Studio 2013在C ++中编写。我注意到以下简单代码(找到here)的异常:
const int HEIGHT = 1000;
const int WIDTH = 100000;
double **p2DArray;
// Allocate memory
p2DArray = new double*[HEIGHT];
for (int i = 0; i < HEIGHT; ++i)
p2DArray[i] = new double[WIDTH];
// De-Allocate memory to prevent memory leak
for (int i = 0; i < HEIGHT; ++i)
delete[] p2DArray[i];
delete[] p2DArray;
return 0;
当我在“返回0”上设置断点时,使用Windows的任务管理器,我可以看到应用程序的“内存”占用空间为0.3 MB。但是,如果我用“float”或“int”替换“double”,我得到“31.3 MB”。此外,通过修改HEIGHT / WIDTH,我获得 int 和 float 的不同MB数量,而 double 的数量保持不变 - 0.3 MB 。有人可以提供解释吗?
感谢。
P.S。由于库函数,我需要使用原始指针。
答案 0 :(得分:2)
您可以非常容易地获得有关内存泄漏的调试报告,例如:使用Visual Studio或Valgrind。
您的代码既不会产生float
也不会double
的泄漏,它完全没问题。实际上,您不应该依赖任务管理器为您提供的数字。它们充其量只是粗略的近似,只是因为你调用delete
并不意味着内存即时返回给操作系统。