2012-12-10 202 views
-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); 
} 

我没有得到任何错误,但它不会跑!不知道为什么这个小差异使其崩溃

+2

'* I = 10;'被访问一个未初始化的指针,这是未定义的行为。 –

+0

代码在两个版本中都是正确的。请提供进一步的细节,如编译器,环境,平台等。 – askmish

+1

@askmish - 实际上两个版本的代码都是错误的。 – user93353

回答

1

这是undefined bahavior。 您已经创建了一个指针,不初始化指针,你直接把值10内存位置指针指向i其中iindeterminate value。所以,在这种情况下,它会把值10到垃圾值位置(指针i的值)。所以它可能会执行,如果垃圾值的位置是可访问的或可能崩溃,如果内存位置不可访问。

因此它只是undefined bahavior

4

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

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