Mengurus Tatasusunan Tempatan dalam C : Mengelakkan Kebocoran Memori
Isu yang dihadapi timbul apabila cuba mengembalikan tatasusunan setempat daripada fungsi. Seperti yang ditunjukkan dalam coretan kod yang diberikan:
char *recvmsg() { char buffer[1024]; return buffer; }
Pendekatan ini mencetuskan amaran kerana alamat pemulangan menunjuk kepada pembolehubah tempatan dengan jangka hayat terhad.
Untuk menangani kebimbangan ini, ia adalah disyorkan untuk menggunakan struktur data alternatif yang memastikan jangka hayat yang stabil untuk tatasusunan. Satu pilihan yang berdaya maju ialah menggunakan bekas perpustakaan standard, khususnya std::vector
Berikut ialah versi semakan fungsi recvmsg:
std::vector<char> recvmsg() { std::vector<char> buffer(1024); // ... return buffer; }
Dalam fungsi utama, tatasusunan boleh diberikan kepada std::vector
std::vector<char> reply = recvmsg();
Jika terdapat keperluan untuk mengakses alamat char*, ia boleh diperolehi melalui:
&reply[0]
Pendekatan ini mengurangkan isu dengan menguruskan peruntukan memori tatasusunan secara dalaman , menghalang potensi tingkah laku yang tidak ditentukan atau kebocoran ingatan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengembalikan Tatasusunan dengan Selamat daripada Fungsi C dan Mengelakkan Kebocoran Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!