在VC中,用Debug调试一个程序,报有内存泄漏,不过VC无法像一般的内存泄漏一样定位到某个文件。
经过检查,发现其中有一段程序,是一个消息响应的函数处理部分,如果用/**/注释掉这段代码VC就不会报内存泄漏。
大家肯定认为内存泄漏就在这段代码中产生的,但问题是我并没有触发这个消息,也就是说根本没有执行这段代码,事实上在这个函数体一开始设了断点也的确没有中断进去,为什么不执行还是产生的内存泄漏现象。
不解中,请高手帮忙,UP者有分。
你把部分代码贴出来让大家看看, 这样更直观
我觉得VC有虚报内存泄漏的时候
既然你说的这么确定,那我就不知道了…… - -!
是不是你的哪个地方指针越界,指到那里对应的代码区去了?
学习.....
是不是你涉及到别的东西了,比如我前一段做的程序,在程序初始化时报告“建立空文档失败”,特奇怪,发现是视图的句柄没有得到。我调了半天,最后才发现是数据库的表建立有问题。可是,这两个没有联系呀!!
所以,你在调程序的时候别光盯着这个报告问题的地方,想想别的地方有没有问题。
再有,你可以先注释掉这段有问题的函数,在用到的时候再调用,可能会好些!
VC编译程序把代码段标记为.TEXT只读,而数据段标记为.DATA读写。你这段的程序数据段是否冲击了其他内存?
^_^,试试RebuildAll,
曾经碰到OnUpdateCmdUI()函数未带参数报错的
是不是用Release版的挂在BoundsChecker上试一下。
Debug实际上是运行在VC的保护模式下,很多问题不能做准的。
有可能是指针变量用完没有被清除.
VC报内存泄漏还是很准的,我工作4年多了,只有可能VC没有报内存泄漏,而实际情况有内存泄漏的情况发生,没有发现过,VC报有泄漏,而实际没有的情况发生。
所以,不要轻易怀疑是VC或者Windows的问题,99。9%的问题都是程序本身的问题。
我碰到过得不到句柄得情况
和内存有关的变量越界,生存期结束,导致引用无效的地址
我觉得还是代码问题。。。不妨把代码贴出,让大家看看,就明白了。。。。
learning.....
这个问题很可能是这些代码中有含有构造的结构体或是类、或是其它的类型。
在这些类或是结构体的构造函数中用了不该用的内存代码
有没有全局变量呀!
同意楼上的~
void CMyDialog::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
int a = 8;//这里F9设一个断点,看是否从开始到结束都没有执行?
//下面的全注释掉
}
我认为不一定是那段你注释掉代码的事,那段可能只是导火索,注释掉了就没了导火索,错误就不表现出来,实际上或许是其他地方有潜在问题。
是否是传入的参数的问题
参数当中的 指针没有得到正确值
bluestar(蓝色星星) ( ) 信誉:96 2003-09-18 14:03:00 得分:0
代码复杂而且设置专业,不方便贴出
你这样说叫人怎么做吗
GZ
把工程打包发过来,帮你看看,7.1 or 以上版本就不要发过来了
我也在改内存泄漏,交流