Memulangkan Tatasusunan daripada Fungsi dalam C
Percubaan untuk mengembalikan tatasusunan daripada fungsi dalam C boleh membawa kepada tingkah laku yang tidak dijangka, seperti yang digambarkan oleh kod berikut coretan:
<code class="cpp">int* uni(int *a,int *b) { int c[10]; ... return c; }</code>
Fungsi ini cuba mengembalikan tatasusunan tempatan c daripada fungsi. Walau bagaimanapun, apabila fungsi itu kembali, memori yang diduduki oleh tatasusunan akan diagihkan, mengakibatkan tingkah laku tidak ditentukan apabila pemanggil cuba mengaksesnya.
Isu asas terletak pada cara tatasusunan disimpan pada tindanan. Apabila tatasusunan diisytiharkan dalam fungsi, ia diperuntukkan pada tindanan, kawasan memori yang digunakan untuk pembolehubah tempatan dan panggilan fungsi. Apabila fungsi keluar, memori pada timbunan akan diagihkan, termasuk memori tatasusunan.
Untuk menyelesaikan isu ini, beberapa alternatif wujud:
Petunjuk Melepasi:
Satu pendekatan ialah menghantar penunjuk kepada tatasusunan daripada fungsi utama:
<code class="cpp">int* uni(int *a,int *b) { ... return a; }</code>
Pendekatan ini membenarkan fungsi utama mengakses dan memanipulasi tatasusunan secara terus. Walau bagaimanapun, ia memerlukan pengurusan ingatan yang teliti untuk mengelakkan kesalahan pembahagian.
Menggunakan Vektor atau Tatasusunan:
Daripada menggunakan tatasusunan biasa, pertimbangkan untuk menggunakan bekas C seperti std::vector atau std::array. Bekas ini mengendalikan pengurusan memori secara automatik, menghapuskan keperluan untuk manipulasi penunjuk manual.
Mengembalikan Struktur:
Pilihan lain ialah membungkus tatasusunan dalam struct dan mengembalikan contoh struct:
<code class="cpp">struct myArray { int array[10]; }; myArray uni(int *a,int *b) { ... return c; }</code>
Dengan mengembalikan nilai (contoh struct), kandungan tatasusunan disalin ke dalam skop fungsi utama, memastikan kebolehaksesannya.
Atas ialah kandungan terperinci Bagaimanakah Anda Mengembalikan Tatasusunan dengan Selamat daripada Fungsi dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!