如何调试MFC中的内存泄漏[转帖]

news/2024/7/6 1:49:26
首先,应该是MFC报告我们发现内存泄漏。注意:要多运行几次,以确定输出的内容不变,特别是{}之间的数值,不能变,否则下面的方法就不好用了。 LeakOut.JPG

        我们来看看:
F:/CodeSample/Test/TestPipe/LeakTest/MainFrm.cpp( 54 ) : { 86 } normal block at  0x00422E80 10  bytes  long .
 Data: 
<            >  1F 1F 1F 1F 1F CD CD CD CD CD 

          F:/CodeSample/Test/TestPipe/LeakTest/MainFrm.cpp( 54 ) 告诉我们MFC认为是在该文件的54行,发生了内存泄漏。你双击改行就可以转到该文件的54行了。但是有时候这一信息并不能用来准确判断,比如:MFC可能报告Strcore.cpp文件的某行,实际上这是CString的实现函数,此时并不知道什么时候发生了内存泄漏。

         此时我们需要更多的信息。那么我们看看紧接其后的:

{ 86 } normal block at  0x00422E80 10  bytes  long .
 Data: 
<            >  1F 1F 1F 1F 1F CD CD CD CD CD 

         它告诉我们:在第86次分配的内存没有释放,一共有10字节,内容移16进制方式打印给我们看。

         有了这些信息,我们可以开始调试内存泄漏了。

         按下F10在程序的刚开始处,停下来,打开Watch窗口:

LeakWatchMenu.JPG

         在Watch窗口中输入:

{,,msvcrtd.dll}_crtBreakAlloc


watch1.JPG

         然后更改值为上文提到的分配次数:86

watch2.JPG

         接着按下F5继续,然后在第86次分配的时候会发生中断:

MessageBox.JPG

         然后我们打开堆栈窗口:

LeakStackMenu.JPGClickStack.JPG

      往回查看最近我们自己的代码,双击堆栈我们自己的函数那一层,上图有绿色三角的那一层。就定位到泄漏时分配的内存了。

FoundLeak.JPG

         之后,就是看你的编码功底了。

 



http://www.niftyadmin.cn/n/3647493.html

相关文章

Spring事务是如何传播的?真香系列

前言 互联网时代&#xff0c;瞬息万变。一个小小的走错&#xff0c;就有可能落后于别人。我们没办法去预测任何行业、任何职业未来十年会怎么样&#xff0c;因为未来谁都不能确定。只能说只要有互联网存在&#xff0c;程序员依然是个高薪热门行业。只要跟随着时代的脚步&#…

【Leetcode】739. Daily Temperatures

题目地址&#xff1a; https://leetcode.com/problems/daily-temperatures/ 题目大意是&#xff0c;对于数组中每个数字&#xff0c;找出右边第一个比它大的数字&#xff0c;记录下标的差最后返回。典型单调栈的应用。维护一个单调下降的栈&#xff0c;如果栈空或者栈顶大于等…

DLL(Dynamic Link Libraries)专题[转帖]

原帖地址:http://www.microsoft.com/china/community/program/originalarticles/techdoc/dll.mspxDLL(Dynamic Link Libraries)专题目录引言 调用方式 MFC中的DLL DLL入口函数 关于约定 关于DLL的函数 模块定义文件(.DEF) DLL程序和调用其输出函数的程序的关系 作者引言比较大的…

【Leetcode】704. Binary Search

题目地址&#xff1a; https://leetcode.com/problems/binary-search/ 给定一个长nnn的升序数组AAA&#xff0c;返回某个给定数ttt的下标&#xff0c;如果不存在则返回−1-1−1。 二分。代码如下&#xff1a; class Solution {public:int search(vector<int>& a, …

Spring是怎样巧用三级缓存解决循环依赖的?灵魂拷问

前言 目前绝大部分的Java程序员都是处于增删改查的阶段&#xff0c;但是到了这个阶段后就应该考虑下一个层次的突破了&#xff0c;总不能做一辈子的crud吧… **以目前IT行业的发展趋势以及就业情况来看&#xff0c;**市场早已经不缺初级开发了&#xff0c;对于中高级开发人才…

【Leetcode】74. Search a 2D Matrix

题目地址&#xff1a; https://leetcode.com/problems/search-a-2d-matrix/ 给定一个mnm\times nmn的矩阵AAA&#xff0c;每行单调上升&#xff0c;并且每行的末项都小于下一行的首项。另给定一个数&#xff0c;问这个数是否在矩阵里。 思路是二分法&#xff0c;可以将整个矩…

StringBoot编程式事务与声明式事务,给大家安排上!

一、前言 长文警告&#xff0c;事实上我不愿意写太长的文章&#xff0c;一面是太冗余&#xff0c;一方面读者容易疲倦&#xff0c;但是只要是涉及到源码级别的&#xff0c;就肯定篇幅不短&#xff0c;因为太短肯定没意义也解释不清楚&#xff0c;但是相信&#xff0c;耐心看完这…

窗口淡入淡出效果的实现

1. 简介函数: SetLayeredWindowAttributes HeaderDeclared in Winuser.h, include Windows.hImport libraryUser32.libMinimum operating systemsWindows 2000所以在98系统下&#xff0c;并不支持2. 属性现在我们直接通过DLL来调用,所以未包含头文件,可以直接使用值来操作.以下…