我有一段时间没有做C++了,但决定完成我为某人正在开发的一个大项目。然而,现在我遇到了以下错误信息...
检测到堆损坏: 在0x17DEB940处的Normal Block(#1761)之后。 CRT检测到应用程序在堆缓冲区结束后写入内存。
我已经逐步检查了我认为可能引起问题的所有函数,但是我束手无策。是否有使用更高级调试功能来追踪此问题的方法?
我有一段时间没有做C++了,但决定完成我为某人正在开发的一个大项目。然而,现在我遇到了以下错误信息...
检测到堆损坏: 在0x17DEB940处的Normal Block(#1761)之后。 CRT检测到应用程序在堆缓冲区结束后写入内存。
我已经逐步检查了我认为可能引起问题的所有函数,但是我束手无策。是否有使用更高级调试功能来追踪此问题的方法?
尝试使用工具来捕捉它。
听起来有点像经典的C语言错误。你确定你没有在while或for循环中写超出c数组(如int[xyz])的范围吗?这不会导致任何错误,但你会在许多与错误部分无关的空间中得到奇怪的效果。:p
尝试使用启用了正常页面堆的AppVerifier。然后将调试器附加到进程,并且如果有一些运气,当内存块被破坏(通过块写入溢出或下溢)时,它将在断点处中断。稍加努力,您还可以获得分配每个堆块的代码的调用堆栈,这也有助于跟踪错误。
尽管追踪这些错误可能会很棘手,但是有关详细信息,请查看《高级Windows调试》书籍,其中有一个专门讨论此主题的章节。