初始化错误

时间:2012-12-10 18:15:21

标签: c pointers initialization

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

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);
}

我没有错误,但它不会运行!无法理解为什么这个小差异使它崩溃

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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);
    

答案 2 :(得分:1)

这是undefined bahavior。 您已经创建了一个指针而没有初始化指针,您直接将值10放到指针i所指向的内存位置,其中i具有indeterminate value。所以,在这种情况下,它会将值10放到该垃圾值位置(指针i的值)。因此,如果垃圾值位置可访问,它可能会执行,如果无法访问内存位置,则可能会崩溃。

因此它只是undefined bahavior