問題:
當函數返回值爲數組(局部變量)時,局部變量存儲在棧中,其作用域只在函數內部,由編譯器自動分配釋放;
當函數調用結束時,棧指針回退,局部變量內存被釋放,此時再引用原來的局部變量就會出現不可預見的結果。
解決方法:
方法一:把數組定義爲static類型的數組,並返回數組
static修飾的變量和函數的生存週期與整個程序的運行期一樣。
方法二:在函數內給指針申請空間(malloc),返回該指針,在主函數中釋放該指針的內存(free)
因爲當給指針a申請空間時,給指針分配的空間在堆上。
堆用於動態內存分配。堆在內存中位於BSS區和棧區之間。一般由程序員分配和釋放,若程序員不釋放,程序結束時有可能由OS回收。
參考:函數返回值爲數組