Malloc e free

di il
2 risposte

Malloc e free

Ciao a tutti ho una funzione che mi ritorna il puntatore ad una struct, all'interno della funzione alloco memoria per la struct e per i suoi membri, quando non ho più bisogno della struct fuori dalla funzione devo deallocare solo la struct o anche i suoi membri?

Scrivo un po di codice per fare un po di chiarezza.

typedef struct a 
{
    char* b;
    char* c;
} a_type;

typedef struct message 
{
    char* a;
    char* b;
    int state;
    bool set;
} msg_type;

a_type *pop(msg_type *msg) {
	a_type *res = (a_type*)malloc(sizeof(a_type);
	res->b = strdup(msg->a);
	res->b = strdup(msg->b);
	return res;
}

int main() {
	msg_type msg = {"test", "test2", 10, false};
	
	a_type *tipo;
	
	tipo = pop(&msg);
	
	/* Utilizzo le informazioni della variabile tipo poi non ne ho più bisogno 
	 *  quindi dealloco  in questo modo? */
	 
	 free(tipo->b);
	 free(tipo->c);
	 free(tipo);
	 
	 /* oppure basta questo? */
	 free(tipo;
Spero di essere stato abbastanza chiaro, logicamente questo è un pò di codice buttato li giusto per farmi capire, il realtà msg è una coda FIFO creata dinamicamente, e la funzione pop restituisce il primo valore della coda e deve quindi deallocare dopo averla restituita, quindi devo per forza di cose allocare la memoria per a_type. Almeno da quello che credo di aver imparato.

Grazie

2 Risposte

  • Re: Malloc e free

    Tutto quello che allochi deve essere deallocato. E nell'ordine contrario ovviamente.
  • Re: Malloc e free

    Ok quindi la prima soluzione è quella giusta
    Grazie
Devi accedere o registrarti per scrivere nel forum
2 risposte