2012-12-10 107 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);