当前位置: 首页 > >

CString发生内存泄露

MFC对话框程序在退出时,发生了内存泄露:


Detected memory leaks!
Dumping objects ->
{98500} normal block at 0x05785AD0, 152 bytes long.
Data: << N N x 7 > 3C AC 4E 10 00 00 00 00 BC A4 4E 10 78 B6 37 00
Object dump complete.

98500


而且每次退出都是一样的.泄漏的内存块都是98500.



是CSring写的有问题。你使用字符串的代码部分是不是有问题


解决方法1:


1. 在程序开始启动的地方(足够前的地方,只要在泄漏的内存分配的前面)使用代码:


_CrtSetBreakAlloc(98500); //98500为上面内存泄漏的块号.

2. 然后debug运行,程序自动断点在"内存块98500"分配的位置:


?


/* break into debugger at specific memory allocation */
if (_crtBreakAlloc != -1L && lRequest == _crtBreakAlloc)
_CrtDbgBreak();

3 .我们已经找到了泄漏的那块内存分配的底层操作的地方了(好拗口!).


这个时候我们利用 "调试" ?> "退出" ,快捷键为:"Shift + F11" .


跳出当前函数..然后一直往"上"跳,边跳边查看调用栈.直到看到了自己写的代码,例如我的


std::ifstream* origStream = new std::ifstream();

4 .这个时候我已经可以判断 origStream 分配了内存,但是没有合理释放.处理后再次运行就没有出现内存泄漏了.


5.最后,记得把_CrtSetBreakAlloc(98500); 这句话删除掉,不然每次都断点,岂不是烦死..


?


解决方法2:


匹配控件中的?new?delete?
在??.cpp?中添加,?这样在DEBUG模式下提示信息可能会更加明显些


#ifdef?_DEBUG
#define?new?DEBUG_NEW
#undef?THIS_FILE
static?char?THIS_FILE[]?=?__FILE__;
#endif

?


?



友情链接: year2525网 工作范文网 QS-ISP 138资料网 528200 工作范文网 baothai 表格模版