Heap corruption detected

HBBlock 2010-11-06 03:39:49
如题,在VC6.0下的多线程程序中出现如下错误
Heap corruption detected at 00C88750
HEAP[GDALBlockSIFT.exe]: HEAP: Free Heap block c887b0 modified at c88bc0 after it was freed

怎么跟踪00C88750 或者 c887b0 ,c88bc0对应的对象或者变量,从而找到错误的地方。

跪求高手解答!
...全文
347 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
HBBlock 2010-11-07
  • 打赏
  • 举报
回复
问题解决了,但是具体原因我还不是很了解
今天猛然想起上次建多线程程序的时候设置了工程的相关属性,把运行时的库设置为如多线程库,默认是单线程的,因此可能是一个线程使用了另一个线程里面的堆内存,导致了这个问题
http://blog.csdn.net/xth21/archive/2008/11/08/3257285.aspx
可以参考这个看看。
HBBlock 2010-11-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xianglitian 的回复:]
断下来以后看看调用堆栈
[/Quote]
昨天用调试看了下call stack ,绿色的三角形指向一个释放内存的地方,但是我仔细看了下那个地方,没什么问题呀,很是奇怪
HBBlock 2010-11-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 coding_hello 的回复:]
每次出现的位置不一定相同吧??

原因必然是在某处堆内存的处理上越界了,或者是使用了已经被释放的内存。review一下代码吧
[/Quote]
确实,每次出现的位置不一样
不好意思,我是菜鸟,这个释放的内存怎么会又被使用了?请高手指点下

在用了Global Flags之后出现了
===========================================================
VERIFIER STOP 00000003: pid 0xD18: multithreaded access in HEAP_NO_SERIALIZE heap

02E41000 : Heap handle
00000C24 : Thread owning heap lock
000012D8 : Current thread trying to acquire the heap lock
00000000 :
===========================================================
还请高手指教
lazy_2010 2010-11-06
  • 打赏
  • 举报
回复
最常见的内存堆错误问题,如果是 VC ,当使用 ASSERT(_CrtCheckMemory()); 进行分析看到底是哪一行的代码导致问题。
向立天 2010-11-06
  • 打赏
  • 举报
回复
断下来以后看看调用堆栈
野男孩 2010-11-06
  • 打赏
  • 举报
回复
每次出现的位置不一定相同吧??

原因必然是在某处堆内存的处理上越界了,或者是使用了已经被释放的内存。review一下代码吧
lazy_2010 2010-11-06
  • 打赏
  • 举报
回复
内存写飞了,可能是数值越界引起的
HBBlock 2010-11-06
  • 打赏
  • 举报
回复
出现这个问题的时候,线程还在运行中,并没有退出
neohope 2010-11-06
  • 打赏
  • 举报
回复
可能是你线程退出后,你引用了无效句柄

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧