Adakah pemadaman[] Setara dengan pemadaman?
Pertimbangkan kod C di bawah:
IP_ADAPTER_INFO *ptr = new IP_ADAPTER_INFO[100];
Apabila cuba untuk membebaskan memori yang diperuntukkan, seseorang mungkin mempertimbangkan untuk menggunakan delete ptr;. Walau bagaimanapun, adalah penting untuk memahami implikasi tindakan sedemikian:
Potensi Kebocoran Memori:
Menggunakan delete ptr; untuk membebaskan tatasusunan yang diperuntukkan dengan new[] boleh mengakibatkan tingkah laku yang tidak ditentukan dan potensi kebocoran memori. Sebabnya terletak pada cara C mengurus memori untuk tatasusunan:
Dalam contoh kami, ptr menunjuk kepada tatasusunan 100 objek IP_ADAPTER_INFO, bukan satu objek. Percubaan untuk memadamkan objek tunggal dan bukannya keseluruhan tatasusunan boleh merosakkan memori dan menyebabkan kelakuan tidak ditentukan.
Perbandingan Kod Terbuka:
Kod pembongkaran yang dijana oleh sorotan Visual Studio 2005 perbezaan antara delete ptr; dan padamkan []ptr;:
Gelagat Tidak Ditakrifkan:
Menggunakan delete ptr; kerana tatasusunan boleh membawa kepada tingkah laku yang tidak ditentukan dan amat tidak digalakkan. Adalah penting untuk menggunakan [] baharu secara konsisten untuk peruntukan dan memadamkan [] untuk deallokasi tatasusunan bagi mengelakkan kebocoran memori dan memastikan pengurusan memori yang betul.
Atas ialah kandungan terperinci Adakah `delete ptr;` Setara dengan `delete[] ptr;` untuk Array Deallocation dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!