утечка памяти в малло c - PullRequest
       70

утечка памяти в малло c

1 голос
/ 10 февраля 2020

У меня есть следующий неисправный фрагмент кода в C, и мне интересно, будет ли утечка памяти или будет указатель, указывающий на свободное место в памяти.

int* p = (int*) malloc(sizeof(int));
p = NULL;
free(p);

Ответы [ 2 ]

3 голосов
/ 10 февраля 2020

Да, утечка памяти. Вы назначаете p для NULL перед освобождением содержимого, на которое оно указывает. Одно быстрое изменение исправит это:

int* p = malloc(sizeof(int));
free(p);
p = NULL;

Разница здесь в том, что мы освобождаем адрес, выделенный mallo c перед установкой p в NULL. В общем, установка указателя на NULL не освободит содержимое, но позволит вам проверить, является ли указатель действительным или нет, что может иметь много практических применений.

2 голосов
/ 10 февраля 2020

У вас будет утечка памяти.

После назначения NULL на p у вас больше не будет способа обратиться к памяти, выделенной вами с помощью malloc.

* 1007. * Ваш звонок на free попытается освободить NULL, ничего не делая.

Следующее правильно освободит память:

int *p = malloc(sizeof(int));
free(p);
p = NULL;

Обратите внимание, что вам не нужно устанавливать p - NULL после освобождения вам действительно нужны только первые две строки.

...