Значит ли значение указателя становится NULL после его освобождения?C - указатель не null после освобождения
int* p = malloc(sizeof(*p));
free(p);
if(p==NULL)
printf("Null\n");
else
printf("Not null\n");
Выход:
Not null
Ну, я предполагаю, что нет;
Во всяком случае, я задал вопрос ранее сегодня:
Посмотрите здесь: C - How can I free dynamically allocated memory?
List* head1 = NULL;
insertFront(&head1, 1);
insertFront(&head1, 2);
print(head1);
while (head1)
{
List *temp = head1;
head1 = head1->next;
free(temp);
}
if(head1 == NULL)
printf("Null\n");
else
printf("Not null\n");
Выход в этом случае:
Null
В этом случае после освобождения head1 (узлы также) head1 становится нулевым, не так ли?
И, наконец, я пропустил некоторые понятия?
head1 - null, однако p нет.
Мой вопрос:
Почему значения отличается от Head1 и р?
Свободная функция не может и не может обнулить указатель. Чтобы он мог это сделать, вам нужно передать указатель на переменную указателя. – PSkocik
@PSkocik спасибо, но как насчет значения head1? –
в целом, сделайте это хорошей привычкой, после 'free'ing вверх указателя ** всегда ** установите его в' NULL' после этого, как если бы вы когда-либо сняли ссылку с указателя 'NULL', это приведет к сбою намека на то, что произошло. – t0mm13b