mfc内存泄漏如何定位,MFC提示内存不足
转载:http://blog..net/xuweiqun/archive/2006/11/15/1385231.aspx
首先,MFC应该报告我们发现了内存泄漏。注意:运行几次以确保输出内容不变,尤其是{}之间的值,否则下面的方法将无法正常工作。
让我们来看看:
f:/code sample/Test/Test pipe/leak Test/main frm . CPP(54):{ 86 } normal block at0x 00422 e 80,10byteslong。
数据:1F1F1F1FCDCDCDCDCD
f:/code sample/test/test pipe/leak test/main frm . CPP(54)告诉我们MFC认为是在这个文件的54行中发生了内存泄漏。您可以双击“更改行”转到文件的54行。但有时这些信息并不能用于准确的判断。比如MFC可能会报一行Strcore.cpp文件,其实就是CString的实现函数。此时,我们不知道内存泄漏是何时发生的。
我们现在需要更多的信息。那么让我们来看看以下内容:
{86}normalblockat0x00422E80,10byteslong。
数据:1F1F1F1FCDCDCDCDCD
它告诉我们第86次分配的内存还没有释放,共有10个字节,内容以十六进制的方式打印给我们。
有了这些信息,我们就可以开始调试内存泄漏了。
在程序开始时按下F10,停止并打开监视窗口:
在“监视”窗口中,输入:
{,msvcrtd.dll}_crtBreakAlloc
然后将该值更改为上面提到的分配次数:86