-1

任何人都知道为什么会这样:

int main(void)
{
char action;
int *i;
*i=10;
printf("%d",*i);
action='C';
printf("%c",action);
}

但这不是

int main(void)
{
char action='C';
int *i;
*i=10;
printf("%d",*i);
printf("%c",action);
}

我没有收到任何错误,但它不会运行!不明白为什么那一点点差异会导致它崩溃

4

3 回答 3

4

您的代码的行为未定义。它的行为没有逻辑。它本质上是随机的。试图分析为什么一些不相关的“微小差异”会改变你在实验中观察到的行为是浪费时间。

于 2012-12-10T18:17:11.797 回答
2

正如其他答案所示,您的两个程序都同样错误。

有很多方法可以使它正确。这里有2种方法。

  1. int *i;
    int j;
    i = &j;
    *i = 10;
    
  2. int * i = malloc(sizeof(int));
    *i = 10;
    
    // After you are done with i
    
    free(i);
    
于 2012-12-10T18:29:37.763 回答
1

undefined bahavior。您已经创建了一个指针,并且没有初始化指针,而是直接将值放入10由指针指向的内存位置iwhere ihas indeterminate value。因此,在这种情况下,它将将该值放入该10垃圾值位置(指针的值i)。因此,如果垃圾值位置可访问,它可能会执行,或者如果内存位置不可访问,它可能会崩溃。

因此它只是undefined bahavior

于 2012-12-10T18:19:55.880 回答