Теоретично я можу це сказати
free(ptr);
free(ptr);
це пошкодження пам’яті, оскільки ми звільняємо вже звільнену пам’ять.
Але що робити, якщо
free(ptr);
ptr=NULL;
free(ptr);
Оскільки ОС буде вести себе невизначено, я не можу отримати фактичний теоретичний аналіз цього щодо того, що відбувається. Що б я не робив, це пошкодження пам’яті чи ні?
Чи вільне звільнення вказівника NULL?
delete NULL
не вірно в C ++. Видалення може бути застосоване до значень нульового вказівника конкретного типу, але не до NULL
. delete (int*) NULL
є законним, але ні delete NULL
.
ptr
вказує на пам'ять, і ви не дзвоните free
на неї, пам'ять просочиться. Встановивши його NULL
просто втрачає ручку на пам'ять і протікає. Якщо це ptr
сталосяNULL
, дзвінок free
- це бездіяльність.
free(ptr)
з ptr = NULL
. Ніхто нічого подібного не сказав.