LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

Вычитал сейчас, что после освобождения памяти - free(buff), нужно обнулить указатель - *buf = 0;.

Это действительно необходимо делать?

*buf = 0 — так ты обнуляешь не указатель, а ячейку памяти, на которую он указывает.

Так делать точно нельзя. Ты память при помощи free() отдал: всё, она не твоя. Читать-писать её больше не надо.

Указатель обнуляется так: buf = 0 (без звёздочки!). Делается это как раз для того, чтобы случайно не обратиться к памяти, которую ты отдал. Если дальше по коду ты случайно обратишься к *buf, забыв, что уже сделал free(), то:

  • Если ты не обнулил указатель, твоя память может разрушить структуры данных с непредсказуемыми результатами.
  • Если ты обнулил указатель, программа сразу упадёт, не успев накуролесить. (нулевая страница памяти всегда недоступна прикладному процессу, и ядро его убъёт)

Парень, вот правда, возьми какой-нибудь серьёзный учебник и прочитай, если хочешь кодить. Я это говорю не чтобы повыпендриваться, а ведь тебе же самому будет проще.

Исходная версия Deleted, :

Вычитал сейчас, что после освобождения памяти - free(buff), нужно обнулить указатель - *buf = 0;.

Это действительно необходимо делать? 

*buf = 0 — так ты обнуляешь не указатель, а ячейку памяти, на которую он указывает.

Так делать точно нельзя. Ты память при помощи free() отдал: всё, она не твоя. Читать-писать её больше не надо.

Указатель обнуляется так: buf = 0 (без звёздочки!). Делается это как раз для того, чтобы случайно не обратиться к памяти, которую ты отдал. Если дальше по коду ты случайно обратишься к *buf, забыв, что уже сделал free(), то:

  • Если ты не обнулил указатель, твоя память может разрушить структуры данных с непредсказуемыми результатами.
  • Если ты обнулил указатель, программа сразу упадёт, не успев накуролесить. (нулевая страница памяти всегда недоступна прикладному процессу, и ядро его убъёт)

Парень, вот правда, возьми какой-нибудь серьёзный учебник и прочитай, если хочешь кодить. Я это говорю не чтобы повыпендриваться, а ведь тебе же самому будет проще.