Thursday 15 August 2013

c - Free an Array of Linked Lists -



c - Free an Array of Linked Lists -

so, have having problem freeing memory have allocated array of linked lists.

here typedef struct:

typedef struct node { int id; int degree; int distance; int status; struct node *next; } node;

here create arrays

node *graph = malloc( sizeof(node) * n); if (graph == null) { printf("fatal error: out of memory!\n"); exit(1); } (int i=0; < n; i++) { n = create_node(i); graph[i] = *(n); } node *graph2 = malloc( sizeof(node) * n); if (graph2 == null) { printf("fatal error: out of memory!\n"); exit(1); } (int i=0; < n; i++) { n = create_node(i); graph2[i] = *(n); }

here create_node:

node* create_node(int id) { // allocate memory construction node *n = malloc( sizeof (node) ); if (n == null) { printf("fatal error: out of memory!\n"); exit(1); } n->id = id; // set value identifies node n->distance = int_max; //we don't know teh source yet, distance infinity n->next = null; n->status = 0; homecoming n; }

here code seek free arrays

for (int i=0; < n; i++) { free_node(&graph[i]);//<---here graph = null; free_node(&graph2[i]); graph2 = null; }

and free_node function:

int free_node(node *n) { node *tmp = malloc(sizeof(node)); while (n != null) {//<---here tmp = n; n = n.next; free(tmp); tmp = null; } homecoming 0; }

i segmentation fault @ lines of code labeled above "<---here" comment @ end of line. starts in free_node function called freeing graph[i].

you trying free struct sending pointer of struct assigning null value pointers after first iteration, making them danging pointers.

check next fix:

for (int i=0; < n; i++) { free_node(graph + i); free_node(graph2 + i); }

c free

No comments:

Post a Comment