【问题标题】:C++ memory leak using float 2d array, disappears if I use double使用浮点 2d 数组的 C++ 内存泄漏,如果我使用双精度则消失
【发布时间】:2015-04-05 09:01:50
【问题描述】:

我正在使用 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;

当我在“return 0”上设置断点时,使用 Windows 的任务管理器,我可以看到应用程序的“内存”占用空间为 0.3 MB。但是,如果我用“float”或“int”替换“double”,我会得到“31.3 MB”。此外,通过修改 HEIGHT/WIDTH,我得到了 intfloat 的不同 MB 数,而 double 的数字保持不变 - 0.3 MB .有人能解释一下吗?

谢谢。

附:由于库函数,我需要使用原始指针。

【问题讨论】:

  • delete和朋友释放内存给C++运行时;然后运行时是否将内存释放回操作系统,导致您在任务管理器中看到的内存数量减少,这取决于它。

标签: c++


【解决方案1】:

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

您的代码不会在floatdouble 中产生泄漏,这完全没问题。在实践中,您不应该依赖任务管理器给您的数字。它们充其量只是一个粗略的近似值,仅仅因为您调用了delete 这并不意味着内存立即返回给操作系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2020-09-24
    • 2014-12-09
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多