之前有一個錯誤認識,錯誤的認為局部變量的回收是發生在函數返回時。其實在塊結束時塊內使用的內容就會被回收了。
以下的實例說明了問題
* p[ ( i = ; i < ; ++ item == &, p[],p[, *p[],*p[]);
某次的輸出(具體的內存地址會有不同,但是依然會發現p[0]與p[1]指向了同一個地方)
p[]=000000000023FE2C p[]=*p[]= *p[]=
這個問題的發現過程是使用struct時懶得手動釋放內存,就試圖將其都放在棧中,想等函數退出時令其自動回收。結果在for塊中定義的變量會不斷被回收,所有的都在同一個地址處。被struct封裝一下,問題會更具有迷惑性。
typedef main( argc, ** p[ ( i = ; i < ; ++== &, p[],p[, p[]->item,p[]->
輸出如下
p[]=000000000023FE20 p[]=]->item= p[]->item=