История изменений
Исправление Deleted, (текущая версия) :
Вычитал сейчас, что после освобождения памяти - free(buff), нужно обнулить указатель - *buf = 0;.
Это действительно необходимо делать?
*buf = 0
— так ты обнуляешь не указатель, а ячейку памяти, на которую он указывает.
Так делать точно нельзя. Ты память при помощи free() отдал: всё, она не твоя. Читать-писать её больше не надо.
Указатель обнуляется так: buf = 0
(без звёздочки!). Делается это как раз для того, чтобы случайно не обратиться к памяти, которую ты отдал. Если дальше по коду ты случайно обратишься к *buf, забыв, что уже сделал free(), то:
- Если ты не обнулил указатель, твоя память может разрушить структуры данных с непредсказуемыми результатами.
- Если ты обнулил указатель, программа сразу упадёт, не успев накуролесить. (нулевая страница памяти всегда недоступна прикладному процессу, и ядро его убъёт)
Парень, вот правда, возьми какой-нибудь серьёзный учебник и прочитай, если хочешь кодить. Я это говорю не чтобы повыпендриваться, а ведь тебе же самому будет проще.
Исходная версия Deleted, :
Вычитал сейчас, что после освобождения памяти - free(buff), нужно обнулить указатель - *buf = 0;.
Это действительно необходимо делать?
*buf = 0
— так ты обнуляешь не указатель, а ячейку памяти, на которую он указывает.
Так делать точно нельзя. Ты память при помощи free() отдал: всё, она не твоя. Читать-писать её больше не надо.
Указатель обнуляется так: buf = 0
(без звёздочки!). Делается это как раз для того, чтобы случайно не обратиться к памяти, которую ты отдал. Если дальше по коду ты случайно обратишься к *buf, забыв, что уже сделал free(), то:
- Если ты не обнулил указатель, твоя память может разрушить структуры данных с непредсказуемыми результатами.
- Если ты обнулил указатель, программа сразу упадёт, не успев накуролесить. (нулевая страница памяти всегда недоступна прикладному процессу, и ядро его убъёт)
Парень, вот правда, возьми какой-нибудь серьёзный учебник и прочитай, если хочешь кодить. Я это говорю не чтобы повыпендриваться, а ведь тебе же самому будет проще.