使用float 2d数组的C ++内存泄漏,如果我使用double则消失

时间:2015-02-05 13:24:30

标签: c++

我使用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。由于库函数,我需要使用原始指针。

1 个答案:

答案 0 :(得分:2)

您可以非常容易地获得有关内存泄漏的调试报告,例如:使用Visual StudioValgrind

您的代码既不会产生float也不会double的泄漏,它完全没问题。实际上,您不应该依赖任务管理器为您提供的数字。它们充其量只是粗略的近似,只是因为你调用delete并不意味着内存即时返回给操作系统。