когда освободить указатель в C и как узнать, освобожден ли он
Я новичок в C, пытаясь выяснить о распределении памяти в C, что я вроде запутался
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int a;
} struct1_t;
int main()
{
funct1(); //init pointer
return 1;
}
int funct2(struct1_t *ptr2struct)
{
printf("print a is %d\n",ptr2struct->a);
//free(ptr2struct);
printf("value of ptr in funct2 is %p\n", ptr2struct);
return 1; //success
}
int funct1(){
struct1_t *ptr2struct = NULL;
ptr2struct = malloc(sizeof(*ptr2struct));
ptr2struct->a = 5;
printf("value of ptr before used is %p", ptr2struct);
if (funct2(ptr2struct) == 0) {
goto error;
}
free(ptr2struct);
printf("value of ptr in funct1 after freed is is %p\n", ptr2struct);
return 1;
error:
if(ptr2struct) free(ptr2struct);
return 0;
}
У меня есть функция 1, которая вызывает функцию 2, и после использования выделенного указателя в funct1 я пытаюсь освободить указатель. И я создаю случай, когда, если возвращаемое значение в funct2 не равно 1, попробуйте еще раз, чтобы освободить указатель.
Мой вопрос ниже
какая практика лучше, если мне нужно освободить память в funct2 (после того, как я ее передам) или в funct1 (после того, как я закончу получать возвращаемое значение funct1) Второе - это правильно ли делать ошибку goto и error:
if(ptr2struct) free(ptr2struct);
Мой третий вопрос: как проверить, освобождено ли выделенное значение или нет? потому что после получения возвращаемого значения я освобождаю указатель, но если я его печатаю, он показывает то же место, что и выделенное (поэтому не нулевой указатель).