在我看來,塊中的自動變量在跳轉到外部作用域後會被釋放。然後我寫了一個程序來測試這個,令我驚訝的是,它運行正常。它甚至跑了好幾次。從塊外部訪問塊內的自動變量的內存?
的程序是:
#include <stdio.h>
int main(int argc, char **argv)
{
int *a = 0;
{
int b = 2;
a = &b;
}
printf("%d\n", *a);
return 0;
}
打印結果是2,怎麼會出現這種情況?
該內存仍然存在,它只會被下一個函數調用或塊範圍破壞。它就像在釋放堆分配塊之後從內存中讀取數據一樣。你不能指望它的工作,但有時它確實。 – woolstar
簡單,你很幸運。內存被標記爲「空閒」,但不會「釋放」,因爲除非有人要求,否則不需要這樣做。 –
就像這個人住在地板上給你一臺電腦,即使那個人搬出去了,你家裏仍然有電腦 – Rugal