區域陣列 `char b[20]` 存活於函式堆疊框架,函式返回後框架銷毀,記憶體失效。回傳其指標屬於懸空指標,後續存取屬於未定義行為。
呼叫 ph() 前:
[main 堆疊框架] ...
呼叫 ph() 時:
[main 框架] [ph 框架: b[20] 在此] ...
ph() 返回後:
[main 框架] [ph 框架已彈出,b 記憶體標記為自由] ...
main 繼續執行 printf:
[main 框架] [printf 參數壓棧,恰好覆蓋舊 b 區域] → 亂碼
永遠不要回傳區域變數(陣列、結構體、類物件)的指標或引用。改用輸出參數、回傳值副本、智慧指標管理動態記憶體,或 C++ 標準容器(`std::string`, `std::vector`)。
理解自動儲存期與動態儲存期的區別,是從「能跑」進階到「健壯」的分水嶺。