簡體   English   中英

釋放動態分配的內存(雙/三指針)

[英]Free dynamically allocated memory (double/triple pointer)

這些是我定義的結構(不要介意語言):

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

現在,我在其他僅使用(Reserva * reserva)作為參數的函數中:

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

但是我不認為這有效,因為在此之后我仍然可以訪問reserva-> data-> dia / mes / ano ...

我的釋放方式出了什么問題? 有沒有辦法檢查免費的“工作”程序?

您仍然可以訪問釋放的內存,但這是未定義的行為。 它可能仍然包含“舊”數據,或者現在可能包含完全偽造的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM