gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:56:44 27 4
gpt4 key购买 nike

我正在使用 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 .有人可以提供解释吗?

谢谢。

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

最佳答案

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

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

关于使用 float 二维数组的 C++ 内存泄漏,如果我使用 double 则消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28345118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com