PDA

Visualizza la versione completa : [C] Deallocazione corretta oggetto di tipo grafo


esoni
23-03-2011, 19:56
4. /** elemento lista di adiacenza */
5. typedef struct edge {
6. /** etichetta nodo adiacente (indice nell'array) */
7. unsigned int label;
8. /** peso dell'arco (distanza in km) */
9. double km;
10. /** prossima adiacenza*/
11. struct edge * next;
12. } edge_t;
13.
14. /** lunghezza massima label -- in caratteri */
15. #define LLABEL 128
16. /** lunghezza massima distanza in km -- in caratteri */
17. #define LKM 32
18.
19. /** nodo del grafo */
20. typedef struct node {
21. /** etichetta informativa (nome citta) */
22. char* label;
23. /** lista di adiacenza */
24. edge_t * adj;
25. } node_t;
26.
27. /** Grafo non-orientato rappresentato come array 0 .. (N-1) di vertici
28. */
29. typedef struct graph {
30. /** array dei nodi */
31. node_t * node;
32. /** numero nodi */
33. unsigned int size;
34. } graph_t;
35.
36.
37.



ciao ragazzi una domanda per deallocare correttamente tutta la memoria di un puntatore a una variabile graph_t devo fare le seguenti deallocazioni?
-per ogni suo nodo:
deallocare lo spazio occupato dalla sua label
deallocare ogni elemento della lista di adiacenza di quel nodo
infine deallocare il puntatore di ogni nodo e la deallocazione del puntatore alla variabile graph_t,
sbaglio qualcosa o dimentico qualcosa? e' possibile evitare tutte queste deallocazioni ?
grazie in anticipo e scusate il disturbo

YuYevon
23-03-2011, 21:59
Originariamente inviato da esoni
ciao ragazzi una domanda per deallocare correttamente tutta la memoria di un puntatore a una variabile graph_t devo fare le seguenti deallocazioni?
-per ogni suo nodo:
deallocare lo spazio occupato dalla sua label
deallocare ogni elemento della lista di adiacenza di quel nodo
infine deallocare il puntatore di ogni nodo e la deallocazione del puntatore alla variabile graph_t,
sbaglio qualcosa o dimentico qualcosa?


Corretto. La regola generale che ad ogni malloc()/calloc() deve corrispondere una free().


Originariamente inviato da esoni
e' possibile evitare tutte queste deallocazioni ?


No, se ad una free() passi un puntatore ad un tipo di dato strutturato, questa non va ad analizzare il tipo per deallocare automaticamente lo spazio anche per i suoi campi.

Loading