c - How to free an array of structs -
i have struct complex , struct complex_set (a set of complex numbers) , have "constructor" , "destructor" functions alloc_set , free_set.
my problem is, following error in second iteration of loop in free_set:
malloc: *** error object 0x1001054f0: pointer being freed not allocated what correct way deinitialize complex_set? i'm wondering whether *points property of complex_set needs freed calling free on first point (and free rest) or freeing each element separately? or have done wrong in initialisation?
here's code:
typedef struct complex complex; typedef struct complex_set complex_set; struct complex { double a; double b; }; struct complex_set { int num_points_in_set; complex *points; // array of struct complex }; struct complex_set *alloc_set(complex c_arr[], int size) { complex_set *set = (complex_set *) malloc(sizeof(complex_set)); set->num_points_in_set = size; // think may use pointer c_arr '*points' // however, want make sure malloc called set->points = (complex *) malloc(size*sizeof(complex)); (int i=0; i<size; i++) { set->points[i] = c_arr[i]; } return set; } void free_set(complex_set *set) { complex *current = set->points; complex *next = null; int iterations = set->num_points_in_set; for(int i=0; i<iterations; i++) { next = current + 1; // error here, in second iteration: free(current); current = next; } free(set); set = null; }
you did 1 malloc() set->points, should 1 free().
you're trying free each point.
Comments
Post a Comment