-3
int *x;
{
int y;
x = &y;
}
*x = 5;
我認爲問題在於x = & y應該改爲x = y。但是,我仍然不知道爲什麼它會崩潰?如果一個程序包含下面的代碼,它可能會崩潰。爲什麼?
int *x;
{
int y;
x = &y;
}
*x = 5;
我認爲問題在於x = & y應該改爲x = y。但是,我仍然不知道爲什麼它會崩潰?如果一個程序包含下面的代碼,它可能會崩潰。爲什麼?
int y
的生存期結束於}
令牌。由於指針x
指向y
,我們現在稱x
爲「懸掛指針」。使用*x
解引用懸掛指針是未定義的行爲,如果幸運的話,這可能會導致崩潰或其他令人討厭的事情。
x
在第5行被分配了地址y
。第6行y
被銷燬。在第7行中,您嘗試寫入變量,該地址包含在x
中。哪些被摧毀。所以你試圖寫入不存在的變量,這會導致未定義的行爲。
當程序退出定義'y'的內部作用域時,變量'x'指向超出作用域。 – melak47
當其舊位置改變時'y'不在範圍內。所以它絕對是未定義的行爲,可以做任何事情。在實踐中,你需要一些額外的複雜因素來實現這個崩潰。 – JSF
** C++上的每本**入門書都解釋了對象的生命週期。您應該閱讀[至少一個](http://stackoverflow.com/q/388242/1889329)。 – IInspectable