Secara teoritis saya bisa mengatakan itu
free(ptr);
free(ptr);
adalah kerusakan memori karena kita membebaskan memori yang telah dibebaskan.
Tapi bagaimana jika
free(ptr);
ptr=NULL;
free(ptr);
Karena OS akan berperilaku dengan cara yang tidak ditentukan, saya tidak bisa mendapatkan analisis teoritis aktual untuk ini tentang apa yang terjadi. Apapun yang saya lakukan, apakah ingatan ini rusak atau tidak?
Apakah membebaskan pointer NULL valid?
delete NULL
tidak valid di C ++. delete dapat diterapkan ke nilai null-pointer dari tipe beton, tetapi tidak untuk NULL
. delete (int*) NULL
legal, tapi tidak delete NULL
.
ptr
menunjuk ke memori, dan Anda tidak memanggilnya free
, maka memori tersebut akan bocor. Menyetelnya menjadi NULL
hanya kehilangan pegangan pada memori, dan kebocoran. Jika ptr
kebetulanNULL
, panggilan free
adalah tidak ada operasi.
free(ptr)
dengan ptr = NULL
. Tidak ada yang mengatakan hal seperti itu.