You can still access freed memory, but it's undefined behavior. It might still contain the "old" data, or it might now contain something completely bogus.
Free dynamically allocated memory (double/triple pointer)
-
12-07-2023 - |
Pregunta
These are the structs I defined (don't mind the language):
typedef struct cliente
{
char* primeiroNome;
char* ultimoNome;
}Cliente;
typedef struct data
{
int dia;
int mes;
int ano;
}Data;
typedef struct reserva
{
Data* data;
int numReservas;
struct cliente* cliente;
struct reserva* next;
}Reserva;
Then I created a list:
Reserva* novaListaReservas() // in English the name would be something like newReservationsList()... I guess
{
Reserva* lista = (Reserva*)malloc(sizeof(Reserva));
lista->next = NULL;
lista->numReservas = 0;
return lista;
}
Then in some function I did this (well not quite but for e.g. assume it was):
Reserva* reserva = novaListaReservas();
Cliente* cliente = (Cliente*)malloc(sizeof(Cliente));
Data* data = (Data*)malloc(sizeof(Data));
data->dia = 30;
data->mes = 4;
data->ano = 2014;
cliente->primeiroNome = (char*)malloc(15 * sizeof(char));
cliente->ultimoNome = (char*)malloc(15 * sizeof(char));
reserva->data = data;
reserva->cliente = cliente;
/*stuff done here/*
//End of Function
Now I'm in some other function that only has (Reserva* reserva) as a parameter I tried:
free(reserva->cliente->primeiroNome);
free(reserva->cliente->ultimoNome);
free(reserva->cliente);
free(reserva->data);
But I don't think it's working because after this I still can access reserva->data->dia/mes/ano...
What's wrong with the way I'm freeing? Is there a way to check if the free 'worked'?
Solución
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow