这是我编写的一个小程序,用于重现我得到的错误:
#include <assert.h>
int main(int argc, char **argv)
{
int* nPtr = 0;
*nPtr = 5;
//assert(0 && "testing");
//static int nZero = 0;
//static float x = 5 / nZero;
return 0;
}
调用堆栈错误,现在有办法回溯错误。 即时编译没有32位优化。 pdb匹配exe。
这是我得到的调用堆栈:
ntdll.dll!76f615de()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!76f615de()
ntdll.dll!76f5014e()
msvcr100d.dll!_unlock(int locknum) Line 375 C
003df930()
cccccccc()
非常感谢, 叶夫
答案 0 :(得分:0)
您的代码已损坏。
当您通过它进行书写时,指针不会指向有效的int
。这种未定义的行为和您的编译器可能会生成它想要的任何内容。
调试器中的堆栈跟踪没有意义是无关紧要的,因为没有办法知道会发生什么 - 这就是 undefined 行为的本质。
答案 1 :(得分:0)
Int * p = 0 ,这意味着p点0x00000000,它不可访问。所以你改变* p,它会导致pession被拒绝
答案 2 :(得分:0)