VS调试内存泄露

注意,如果发生泄漏的 cpp 文件中如果没有添加以下代码,则可能无法正常跳转:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

最常见的情况
如: MFC 可能报告 Strcore.cpp 文件的某行有内存泄漏, 但实际上这是 CString 的实现函数, 本身并不会造成
内存泄漏,由于使用它的代码并没有正确释放包含了 CString 对象的内存块,导致 CString 内部动态分配的缓存空
间得不到释放引起泄漏, 此时并不能直观的知道发生了内存泄漏的真实位置, 这时我们就需要更多的信息来辅助
定位发生泄漏的实际位置。那么我们看看紧接其后的:
{86}normalblockat0x00422E80,10byteslong.
Data:<>1F1F1F1F1FCDCDCDCDCD

它告诉我们:在第 86 次分配的内存没有释放,一共有 10 字节,内容移 16 进制方式打印给我们看。有了
这些信息,我们可以开始调试内存泄漏了

在程序开始的地方下断点,再在watch窗口name中输入
在 VS2005 中常写为:
{,msvcrt80d.dll}_crtBreakAlloc
VS2013 中写为:(注意是 vcr 而不是 vcrt)
{,msvcr120d.dll}_crtBreakAlloc
其它版本的类似。

在watch窗口中的value中输入内存块号,再按F5即可定位到泄露之处

猜你喜欢

转载自blog.csdn.net/weixin_39424913/article/details/85053427
今日推荐