c-释放动态分配的内存(双/三指针)



这些是我定义的结构(不要介意语言):

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;

然后我创建了一个列表:

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;
}

然后在某些功能中,我这样做了(好吧,不完全是这样,但假设是这样):

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

现在我在其他一些函数中,只有(Reservea*Reserva)作为我尝试过的参数:

free(reserva->cliente->primeiroNome);
free(reserva->cliente->ultimoNome);
free(reserva->cliente);
free(reserva->data);

但我认为它不起作用,因为在这之后我仍然可以访问reserva->data->dia/mes/ano。。。

我释放的方式有什么问题?有没有办法检查免费的"有效"?

您仍然可以访问释放的内存,但这是未定义的行为。它可能仍然包含"旧"数据,或者现在可能包含完全伪造的数据。

相关内容

  • 没有找到相关文章

最新更新