大家知道,当在一个项目中包含了如下语句,则可以开始Debug C/C++的内存泄漏问题
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h> 还可以使用_CrtDumpMemoryLeaks();来确定内存是否发生了泄露~
产生如下的输出
Detected memory leaks!Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18}
normal block at 0x00780E80, 64 bytes long.Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete. 那么,我想问的是,当_CrtDumpMemoryLeaks()运行时,检测到了泄漏,而输出窗口中的产生错误的行数(如上的eaktest.cpp(20) 中的20)为什么是申请这块空间的行数,而不是发生堆泄漏的行数呢?
如果真的是这样,那么有没有什么办法可以具体检测出泄漏发生的地方呢?谢谢大家了~
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h> 还可以使用_CrtDumpMemoryLeaks();来确定内存是否发生了泄露~
产生如下的输出
Detected memory leaks!Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18}
normal block at 0x00780E80, 64 bytes long.Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete. 那么,我想问的是,当_CrtDumpMemoryLeaks()运行时,检测到了泄漏,而输出窗口中的产生错误的行数(如上的eaktest.cpp(20) 中的20)为什么是申请这块空间的行数,而不是发生堆泄漏的行数呢?
如果真的是这样,那么有没有什么办法可以具体检测出泄漏发生的地方呢?谢谢大家了~
解决方案 »
- vc++中打大小写切换很麻烦!!!有什么办法呢????????
- 为什么以前通过的程序现在重编译有问题!
- 如何在所有进程中监视一个函数API调用?
- 关于帮助的问题
- LoadCursor的用法?我想改变鼠标的形状,总是不成功
- m_edit.SetWindowText(str),怎样改变编辑框中文本字体的大小?
- 通用对话框getopenfilename调用完文件夹被独占如何处理啊?
- 怎样使微软的IE不能用,一直用自己的浏览器,我用PC Security软件都不能锁住IE?
- unicode库。是在vc的那个组件里面的呀!我重装vc后还是有fatal error LNK1104: cannot open file "mfc42ud.lib"
- 求助大神们,MFC,bmp图像显示出问题,在线等
- 想获取服务端的屏幕?
- C++菜鸟提问
==汗,我还是第一次知道啊......学习了。
也就是什么时候释放是你的事,他只管告诉你:我在XX行探到你申请的内存了,但是你没有释放!
还是要查到”free()或delete错误“的原因。
汗,名词,但在这里是汗颜的简称,也就是惭愧的意思,想毕大家都知道吧。但出现在一句话的开头在朗读时候比较给力,用的非常的好,比如屈原会在句子结束时加个“兮”,作为语气助词,我认为“汗”在这里也可以理解为语气助词。有不同意见的可以继续讨论。
我还是第一次知道啊......这句话讨论起来我今天就别睡了,还是下次再说吧。
学习了。表示是大板向楼主和楼主的这个帖子学习的意思,也就是受教了的意思。说明lz是值得我们学习的,对内存泄漏的问题我们应该在思想上引起高度的重视,要长抓不懈,警钟长鸣。同时,我们也不应该单纯理解为谦虚受教的意思,这其实是向大家做个表率,知之为知之,不知为不知,三人行,必有我师,学海无涯苦作舟,回头是岸啊!
好了,分析完毕,lz慢慢体会吧。为了防止被当作水帖吃掉,还是回答问题吧。
如果free()或delete错误,有没有什么具体的函数可以检查出原因?据我所知这个真没有。
#ifdef _DEBUG
#define new DEBUG_NEW
#endif