int *something() {
int x = 5;
int *b = &x;
return b;
}
int main() {
int z = *something()
printf("%d",z);
}
如果堆棧分配稱爲something
的功能,則它返回一個值之後,INT X和INT * B被刪除是如何工作的Stack的定義如何工作?
,如果他們被拆除,我們將不能夠尊重指針由something
返回,因爲它指出了int x
這是從堆棧中刪除
未定義的行爲。 –
我投票結束這個問題作爲題外話,因爲UB dup * 1000 –
在這個問題不可避免地關閉之前...基本上你的直覺在這裏,這不會可靠地工作(正是你給的原因)並且在C中是未定義的行爲。它可能對你有用,這一次是一種僥倖,可能你的編譯器內聯了整個函數,並且只是不斷傳播z = 5; –