Код, приведенный ниже, дает неопределенное поведение, иногда код работает хорошо, но иногда он дает ошибку munmap_chunk
.Как вы безопасно освобождаете память?
char *str = "hello world";
if(str != NULL) free(str)
Есть что-то нехорошо, что я делаю в приведенном выше коде?
Также как избежать duplicate free
? Как проверить, есть ли у переменной некоторая память прямо сейчас/или еще не была освобождена?
Это ложный хороший совет. Во-первых, 'free (NULL)' является законным и действительным, во-вторых, вы просто * скрываете * двойную свободную. Программа, которая опирается на такой фрагмент кода, нарушает логику. –
Программа, которая опирается на такой фрагмент кода, сломала логику. ..? Я не понимаю этого. Пожалуйста, объясни? –
Если вы попали в программу, в которой вы не знаете, сколько раз был освобожден фрагмент памяти (например, в вашем случае), ваша логика неверна. Память должна быть освобождена * ровно один раз *. Установка указателя на 'NULL' для предотвращения освобождения памяти * снова * является проблемой проектирования. –