分享

VC:内存溢出(HEAP: Free Heap block ×××modified at ×××after it was freed)

 9loong 2012-10-18

2009-12-15 23:02:20|  分类: 疑难杂症

HEAP: Free Heap block ×××modified at ×××after it was freed

问题很严重!第一次出现异常提示时,程序依然继续运行;若干次之后,程序异常中断,函数调用栈不能提供足够的有效信息。

看起来似乎是内存重复释放的问题,其实不然!因为程序是在若干次循环后才出现这一问题,如果是重复释放,应该是第一次循环就会出现这个问题。

刚才我在路上仔细想了一下,觉得是由于内存溢出导致的,而不是重复释放内存。其实,这类似于ShellCode的原理,即越界访问。由于程序是在Debug模式下运行,Debug模式下,内存不是紧凑排列的,所以,虽然有越界访问,但不会立刻导致程序崩溃。

如果这一推断正确,那么,release模式下,程序应该崩溃!但是结果令我大失所望。

 

2009.12.16

VC:视频压缩的内存溢出问题

之前认为这是filter队列阻塞所致。而我改用线程处理,问题依旧,于是,我认为这是内存溢出,而不是队列满了的缘故。

我使用了几种侦测内存溢出的方法检测代码,发现并没有内存溢出,一切正常。于是,我再次想到队列阻塞。

 

问题重现:

为了证实这一判断,我在Transform中加入如下代码:
 Sleep(1000);
 return NOERROR;

Filter Graph大约每秒传递10个数据块,如果我强制性地Sleep,造成人为性的队列阻塞,应该是可以再现上面的问题的!

而事实正是如此!十几秒之后,同样的问题出现了!

由此可以断定,这个问题是队列阻塞所致。由于队列是由DirectShow来管理的,所以,这里要分析和处理的话,还是比较困难的,需要重载相关的类。只能是提升压缩效率了。


(###)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多