gpt4 book ai didi

c++ - 在 Visual C++ 中检查内存泄漏的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 04:32:48 24 4
gpt4 key购买 nike

最近我一直在努力提高自己的个人 C++ 技能,所以我实现了一个数组列表作为学习练习。在我开始工作后,我开始检查内存泄漏,并对输出感到非常困惑。

Source on GitHub (main.cpp, ArrayList.cpp, ArrayList.h)

我从 this page from Microsoft 获得了很多关于如何开始检查泄漏的信息(因此在主文件的顶部、主函数的开始和 ArrayList.cpp 文件的顶部都有声明。

Visual Studio 告诉我以下信息:

Detected memory leaks!
Dumping objects ->
c:\users\cody\desktop\arraylist\arraylist\arraylist.cpp(48) : {4267} normal block at 0x007F9BC8, 3992 bytes long.
Data: < > 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00
Object dump complete.
The program '[16620] ArrayList.exe' has exited with code -1073741510 (0xc000013a).

以及有问题的代码部分

void AL::ShrinkToFit()
{
int* newArray = new int[currentIndexOfFirstOpen]; //Line 48, as mentioned in the mem leak output
for (int i = 0; i < currentIndexOfFirstOpen; i++)
{
newArray[i] = currentArray[i];
}
int* oldArray = currentArray;
currentArray = newArray;
delete[] oldArray;
currentMaxLoad = currentIndexOfFirstOpen;
}

很明显我错过了一些东西。如果您检查上面链接的 ArrayList.cpp 文件,它(在不同情况下)告诉我该文件中的任何地方都有泄漏,我有“new int [some number]”。 Microsoft 的页面说我必须使用预处理器来重新定义 new,因为它只适用于 C 运行时,但它没有提到 delete(或 delete[])。这段内存真的被泄露了吗?每个 new[] 都有一个匹配的 delete[],但我无法判断这是合法泄漏还是泄漏检测工具不理解 delete。我尝试用 free 替换 delete(我让预处理器重新定义 new,就像 Microsoft 文章中那样),但它没有任何变化。如果我在泄漏,有人可以指出哪里/为什么吗?

最佳答案

我尝试使用 Visual Leak Detector ( https://vld.codeplex.com/ ) 运行您的代码,看起来您没有内存泄漏,但是当退出时(使用关闭按钮)命令提示符泄漏检测器失败并检测到泄漏在你提到的那一行。尝试在 main.cpp 中删除这一行

Sleep(1000000); //hold the prompt open

然后用这个代替

std::cin.get();
return 0;

在程序末尾提供击键并以代码 0 退出操作系统,这应该可以解决您的问题。

关于c++ - 在 Visual C++ 中检查内存泄漏的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34011943/

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