Adakah padam[] Setara dengan pemadaman? Penerokaan Tingkah Laku Tidak Ditakrifkan
Persoalan sama ada menggunakan padam atau padam[] apabila menetapkan lokasi tatasusunan dinamik boleh menyebabkan kebocoran memori telah menjadi subjek perdebatan dalam kalangan pengaturcara. Untuk menyelidiki topik ini, mari kita pertimbangkan kod pembongkaran yang dijana oleh Visual Studio 2005:
; delete ptr; 0041351D mov eax,dword ptr [ptr] 00413520 mov dword ptr [ebp-0ECh],eax 00413526 mov ecx,dword ptr [ebp-0ECh] 0041352C push ecx 0041352D call operator delete (4111DBh) 00413532 add esp,4 ; delete []ptr; 00413535 mov eax,dword ptr [ptr] 00413538 mov dword ptr [ebp-0E0h],eax 0041353E mov ecx,dword ptr [ebp-0E0h] 00413544 push ecx 00413545 call operator delete[] (4111E5h) 0041354A add esp,4
Membandingkan kedua-dua blok kod ini mendedahkan sedikit perbezaan dalam panggilan mereka kepada operator padam dan operator padam[]. Perbezaan ini menyerlahkan soalan penting: adakah menggunakan padam pada tatasusunan dinamik yang setara dengan menggunakan padam[]?
Malangnya, jawapan kepada soalan ini terletak di bawah payung tingkah laku yang tidak ditentukan dalam C . Tingkah laku tidak ditentukan merujuk kepada situasi di mana tingkah laku program tidak ditentukan oleh standard bahasa. Akibatnya, ia mungkin berbeza-beza mengikut pengkompil, versi pengkompil dan faktor lain.
Disebabkan ketidakpastian yang wujud ini, adalah dinasihatkan untuk mengelak daripada menggunakan padam pada tatasusunan dan mematuhi penggunaan padam[]. Pendekatan ini memastikan tingkah laku yang boleh diramal dan menghalang potensi kebocoran memori atau akibat lain yang tidak dijangka. Ringkasnya, walaupun padam dan padam[] mungkin kelihatan serupa dalam senario tertentu, perbezaan halusnya dan potensi tingkah laku yang tidak ditentukan menuntut pengaturcara menggunakannya dengan berhati-hati.
Atas ialah kandungan terperinci Adakah `delete` Setara dengan `delete[]` untuk Tatasusunan Dinamik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!