[C, Teoria] Free

Dr. Akim
Ciao a tutti!
Ho risolto, potete chiudere. Lascio l'esercizio in caso qualcuno volesse cimentarsi nella risoluzione!


Risposte
apatriarca
Ho dato una occhiata veloce al codice ma mi sembra più complicato di quanto sia necessario. In particolare, non è chiaro perché ti stia complicando la vita usando l'aritmetica dei puntatori. Per esempio:
(*((*b) + i)).str
// È equivalente a
(*b)[i].str

Il primo problema con free è in effetti legato a questo tentativo di evitare di usare la notazione più semplice. Infatti abbiamo che
((*b) + i)

è un puntatore a string per cui non puoi usare il punto per accedere ai suoi elementi. Avrei dovuto semplicemente scrivere:
(*b)[i].str

Mi stupisce compili. In effetti io ottengo i seguenti errori in fase di compilazione:
gcc main.c
main.c: In function 'print_n_free':
main.c:78: error: request for member 'str' in something not a structure or union
main.c:82: error: request for member 'str' in something not a structure or union

Dr. Akim
Ciao!

Grazie per la risposta, potete chiudere ho risolto.
P.s. ho usato l'aritmetica dei puntatori perché non l'ho mai usata granchè, così mi sono potuto esercitare come si deve!

:smt023

apatriarca
Ci sono situazioni in cui l'aritmetica dei puntatori è utile, ma non credo lo sia in questo caso. Riduce solo la leggibilità del codice. Ti consiglio comunque di cercare di memorizzare il valore di espressioni che usi più volte in modo da avere un singolo punto da modificare nel caso in cui ci sia un errore. Avresti insomma potuto scrivere qualcosa come:
stringa *current = (*b) + i;
free(current->str);
free(current);

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.