Я думаю, у вас есть небольшое недоразумение, связанное с указателем.
Ваш заголовок гласит:
Бесплатный неинициализированный указатель ...
и ваш код
int *a = (int*)malloc(sizeof(int));
Проблема в том, что в коде нет неинициализированного указателя . Единственным указателем в коде является переменная a
, и она равна , инициализированной значением, возвращаемым malloc
.
Освобождение неинициализированного указателя было бы плохо - пример:
int *a; // a is an uninitialized pointer
free(a); // Real bad - don't do this
но так как вы фактически инициализируете указатель, тогда - Да, вы должны вызывать free, когда вы закончите, используя указатель объекта / памяти a
, на который указывает. Неважно, было ли присвоено объекту, на который указывает указатель (ака, память), значение.
Общее правило: Для каждого звонка malloc
должен быть звонок free
(Исключение: если ваша программа завершает работу, вам не нужно звонить free
)