2015-12-13 13 views
-3
int *x; 
{ 
    int y; 
    x = &y; 
} 
*x = 5; 

我認爲問題在於x = & y應該改爲x = y。但是,我仍然不知道爲什麼它會崩潰?如果一個程序包含下面的代碼,它可能會崩潰。爲什麼?

+0

當程序退出定義'y'的內部作用域時,變量'x'指向超出作用域。 – melak47

+1

當其舊位置改變時'y'不在範圍內。所以它絕對是未定義的行爲,可以做任何事情。在實踐中,你需要一些額外的複雜因素來實現這個崩潰。 – JSF

+1

** C++上的每本**入門書都解釋了對象的生命週期。您應該閱讀[至少一個](http://stackoverflow.com/q/388242/1889329)。 – IInspectable

回答

1

int y的生存期結束於}令牌。由於指針x指向y,我們現在稱x爲「懸掛指針」。使用*x解引用懸掛指針是未定義的行爲,如果幸運的話,這可能會導致崩潰或其他令人討厭的事情。

0

x在第5行被分配了地址y。第6行y被銷燬。在第7行中,您嘗試寫入變量,該地址包含在x中。哪些被摧毀。所以你試圖寫入不存在的變量,這會導致未定義的行爲。