Теоретично я можу це сказати
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. Ніхто нічого подібного не сказав.