为什么这个程序没有运行时错误?

时间:2012-04-29 07:58:19

标签: c

int main()
{
   int i,j,k;
   i=1;j=2;k=3;
   int *p =&k;
   *(p-1)=0;
   printf("%d%d%d",i,j,k);
   getch();
}

输出为1 2 3。

3 个答案:

答案 0 :(得分:3)

您的程序显示未定义的行为,您正在执行的指针算术无效。

你只能在实际指向数组的指针上做指针算术,并且加法或减法的结果仍然必须指向数组内部(或者如果你不打算取消引用它,则必须指向数组的结尾)。

所以任何事情都可能发生,编译器可以为该代码生成任何代码。

答案 1 :(得分:2)

在分配p-1后,您不能引用&k这对您来说是无效指针,并且使用它的行为未定义。

答案 2 :(得分:0)

如果您的迷失指针遇到引发该错误的内容,例如某些受保护的内存或稍后将在某些计算(0)中成为除数的位置,则仅发生运行时错误。