傳遞數組:潛在的陷阱
雖然從C 中的函數傳回數組看起來很簡單,但可能會出現隱藏的複雜性,如使用者體驗所示嘗試使用函數合併兩個陣列中的非負數。
使用者在建立數組的函數外部存取合併數組時觀察到不正確的輸出。這是因為在堆疊上建立的陣列(例如在函數中聲明為「int c[10]」的陣列)一旦函數退出就會被銷毀。之後訪問它們會導致未定義的行為。
要解決此問題,一種選擇是用包含該數組的結構替換本地數組。當結構體返回時,其內部數組被複製到調用函數的記憶體中,有效地避免了堆疊破壞問題。以下是一個例子:
<code class="cpp">struct myArray { int array[10]; }; myArray uni(int *a, int *b) { myArray c; // Same logic as before for merging arrays return c; }</code>
在main 中,可以對傳回的結構體進行賦值,並存取內部陣列:
<code class="cpp">myArray c = uni(a, b); for (int i = 0; i < 10; i++) { cout << c.array[i] << " "; }</code>
另一個解是使用指標為陣列分配記憶體動態地,正如「傳遞指標」一章所討論的。但是,這需要手動管理記憶體並避免記憶體洩漏。
方法的選擇取決於特定要求,但在函數中使用陣列時,理解這些陷阱至關重要。
以上是為什麼我的合併數組在從 C 函數返回後消失了?的詳細內容。更多資訊請關注PHP中文網其他相關文章!