Это всегда - хорошая практика для установки указателей в NULL после свободный () - луг их? [дубликат]

8
задан Community 23 May 2017 в 11:51
поделиться

4 ответа

Я проголосовал за плохую практику. Если вы действительно хотите присвоить значение, установите его на (void *) 0xdeadbeef. Однако сначала проверьте, что может делать ваш ЭЛТ. Приличный распределитель отладки установит освобожденную память в соответствии с шаблоном, который может вызвать бомбу при использовании указателя после того, как он был освобожден. Хотя это не гарантируется. Но тогда не изменение значения указателя - лучшее (и более быстрое) решение.

2
ответ дан 5 December 2019 в 10:00
поделиться

Некоторые считают это хорошей практикой, поскольку это предотвращает случайное обращение к памяти после того, как она была освобождена()ed.

6
ответ дан 5 December 2019 в 10:00
поделиться

Думаю, да ...

Когда вы закончите использовать часть менори, мы должны освободить () его. Это позволяет использовать освобожденную память для других целей .. .подобно дальнейшим вызовам malloc ().

Free принимает указатель на память в качестве аргумента и освобождает память, на которую указывает указатель ...

Надеюсь, это поможет ... :)

-5
ответ дан 5 December 2019 в 10:00
поделиться

Хотя это и не повредит, но не всегда поможет. Проблема заключается в том, что легко существует несколько копий указателя, и, скорее всего, вы собираетесь установить только одну из них в NULL. Классический пример, когда это совсем не помогает:

void free_graph(graph *g)
{
    ...
    free(g);
    g = NULL;  // not useful in this context
}

Проблема здесь в том, что вы устанавливаете в NULL только указатель, локальный для free_graph, а указатель, хранящийся у вызывающего free_graph, все еще будет иметь исходное значение.

14
ответ дан 5 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: