ในทางทฤษฎีฉันสามารถพูดได้ว่า
free(ptr);
free(ptr);
เป็นความเสียหายของหน่วยความจำเนื่องจากเรากำลังปลดปล่อยหน่วยความจำที่ได้รับการปลดปล่อยไปแล้ว
แต่ถ้า
free(ptr);
ptr=NULL;
free(ptr);
เนื่องจากระบบปฏิบัติการจะทำงานในลักษณะที่ไม่ได้กำหนดฉันจึงไม่สามารถรับการวิเคราะห์ทางทฤษฎีที่แท้จริงเกี่ยวกับสิ่งที่เกิดขึ้นได้ ไม่ว่าฉันกำลังทำอะไรอยู่นี้หน่วยความจำเสียหายหรือไม่?
การพ้นตัวชี้ NULL ถูกต้องหรือไม่?
delete NULL
ไม่ถูกต้องใน C ++ ลบสามารถนำไปใช้ค่า null ชี้ประเภทคอนกรีต NULL
แต่ไม่ให้ delete (int*) NULL
เป็นกฎหมาย delete NULL
แต่ไม่ได้
ptr
ชี้ไปที่หน่วยความจำและคุณไม่ได้เรียกfree
ใช้หน่วยความจำนั้นจะรั่วไหล การตั้งค่าให้NULL
สูญเสียการจัดการกับหน่วยความจำและการรั่วไหล หากptr
เกิดขึ้นการNULL
โทรfree
คือการไม่ดำเนินการ
free(ptr)
ด้วยptr = NULL
. ไม่มีใครพูดอะไรแบบนั้น