打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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来管理的,所以,这里要分析和处理的话,还是比较困难的,需要重载相关的类。只能是提升压缩效率了。


(###)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java程序内存分析:JMap与Eclipse Memory Analyzer - COD...
队列、堆、栈、堆栈的区别?
Cortex-M3精通之路-1(汇编启动文件)
深入理解malloc和free
不要将数据库中的“分库分表”理论盲目应用到 Elasticsearch
Objective
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服