_BLOCK_TYPE_IS_VALID是什么错误?

x_xy 2003-06-09 01:20:21
在VC下写的程序,执行到退出的时候,会出现这个错误提示:
Debug Assertion Failed!
Program:........
File:dbgheap.c
Line:1017
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
.......
有哪位高手知道这个错误一般是怎么产生的吗?
因为程序是个服务程序,所以没法单步调试,而用attach的方式进行调试,就不会在引出这个错误了。所以十分的头疼。请指点一二!
...全文
1202 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Awang_126 2010-06-18
  • 打赏
  • 举报
回复
原因:1.内存泄漏;所以当程序退出时,系统会收回分配的内存,于是调析构函数,由于内存已被错误地释放,于是就会出现“Debug Assertion Failed”的错误。

2.这个assert说明什么问题呢?说明有一块内存在被释放的时候,它的头部里面的信息已经被改掉了,和预期的不一样。内存分配的程序往往在被分配出的内存块头部放上一些校验信息。这个信息内存的用户是不知道也不应该修改的。这样,在内存被释放的时候,内存分配程序就可以验对这个头部信息是否被改过了。若被改过,就说明发生了内存corruption. 这种corruption有两种可能性:1)有人在内存越界写东西;或者:2)这块内存已经被释放了,又被重复释放了一次。 (在第一次被释放中,是内存分配程序改掉了头部信息)。

3.pHead_>nBlockUse就可能是空指针,或它指向的东西已经不存在了。
ExitWin 2003-06-09
  • 打赏
  • 举报
回复
你看看是不是你有什么 new 出来的东东没有初始化

我记得我原先也出过这样的错误。
x_xy 2003-06-09
  • 打赏
  • 举报
回复
唉,该死的程序在服务的调试模式下(-d)就完全正常,弄得我一筹莫展。
arfi 2003-06-09
  • 打赏
  • 举报
回复
帮不了你,只查到一句话:Client hook free failure.
x_xy 2003-06-09
  • 打赏
  • 举报
回复
dbgheap.c 是CRT的文件吧。这是断言失败,不过是系统调用过程中产生的,我也不知道我的哪一步函数会调用这里,感觉应该是某个析构函数。
但因为写的是个服务程序,调试起来非常的麻烦。
我主要想知道问题最可能出在什么地方,有没有写过服务程序的朋友,有什么调试的经验可以介绍?
arfi 2003-06-09
  • 打赏
  • 举报
回复
看前边像是断言失败,不知dbgheap.c的1017行是不是assert(...);语句。
x_xy 2003-06-09
  • 打赏
  • 举报
回复
唉,有什么好的调试办法吗?
rtdb 2003-06-09
  • 打赏
  • 举报
回复
应该是内存越界, 该处内存已被非法改写了。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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