【发布时间】:2008-12-22 02:01:11
【问题描述】:
我正在调试 MS VC++ 6.0 中的一些代码。出于某种原因,在我试图删除一些动态分配的内存的某个时刻,它中断了,我收到一个弹出消息框,上面写着“从代码中调用的用户断点”.. 然后弹出反汇编窗口,我见
*memory address* int 3
奇怪的是,在我调用这样的汇编指令的代码中没有任何地方(我认为 asm int 3 是 x86 的硬件中断命令?)..
这可能是什么原因造成的?
编辑:回答:我的代码是“离开”数组的末尾,但仅在 Visual Studio 调试标记的位置中使用 0xFDFDFDFD,称为 NoMan'sLand 围栏。我认为它也称为 Off一个错误..这个数组与我在发生错误时释放内存的点无关。这使得它更难发现.. :(
【问题讨论】:
-
只是好奇 - 您是否通过单步汇编指令找出调试堆不喜欢的内容或其他一些工具/技术有帮助?
-
我查看了这个站点highprogrammer.com/alan/windev/visualstudio.html,它说:0xFDFDFDFD 是一个内存值,MSVC++ 调试器用来指示数组中的边界以检测逐个错误。我检查了我的指针和单步执行中的迭代..
-
源代码,发现我没有正确绑定我的一个数组。所以我想这只是我需要正确检查我的指针的一种情况:)
-
仅供参考 - 这是一篇详细介绍调试堆使用的大多数特殊填充值的帖子:stackoverflow.com/questions/370195/…
-
是的,我相信我上面提供的链接在“有趣”内存值下包含相同的信息.. :) 有人可以关闭这个吗?我没有足够的代表:P
标签: c++ debugging visual-c++ visual-c++-6