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 NULLtidak valid di C ++. delete dapat diterapkan ke nilai null-pointer dari tipe beton, tetapi tidak untuk NULL. delete (int*) NULLlegal, tapi tidak delete NULL.
ptrmenunjuk ke memori, dan Anda tidak memanggilnya free, maka memori tersebut akan bocor. Menyetelnya menjadi NULLhanya kehilangan pegangan pada memori, dan kebocoran. Jika ptr kebetulanNULL , panggilan freeadalah tidak ada operasi.
free(ptr)dengan ptr = NULL. Tidak ada yang mengatakan hal seperti itu.