2015-03-20 5 views
0

У меня есть два: СтруктурыC - Выделение массива структуры внутри структуры

typedef struct Term { 
    double coeff; 
    int *pow; 
} Term; 


typedef struct Polynomial { 
    char *vars; 
    int num_terms; 
    int num_vars; 
    int ordering; 
    Term *terms; 
}Polynomial; 

мой инициализации выглядит следующим образом:

Polynomial *p; 
p = malloc(sizeof(*p)); 
p->num_vars = num_vars; 
p->num_terms = num_terms; 
p->vars = malloc(sizeof(char) * num_vars); 
// !!!!! next line 
p->terms = malloc(sizeof(Term) * num_terms); 
p->ordering = 0; 

memcpy(p->vars, vars, sizeof(char) * num_vars); 
for (int i = 0; i < num_terms; i++) { 
    p->terms[i].pow = malloc(sizeof(int) * num_vars); 
} 

работает Valgrind:

valgrind --leak-check=yes --track-origins=yes ./poly 

говорит мне :

==22734== 16 bytes in 1 blocks are definitely lost in loss record 1 of 1 
==22734== at 0x4C29F90: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==22734== by 0x400652: empty_poly (in /home/pietro/tmp/test/poly) 
==22734== by 0x40074E: main (in /home/pietro/tmp/test/poly) 

полный код доступен как gist

Как можно правильно инициализировать структуру?

Спасибо!

+0

Вы не инициализируете 'coef' в терминах. Это то, что вы хотите ? – chmike

ответ

3

Ошибка очевидна. Вы забываете освободить поли-> термины. Попробуйте добавить бесплатные (поли-> термины) после бесплатных (poly-> vars). В инициализации нет ничего плохого, вы не просто освобождаете все данные, которые вы выделили.

Смежные вопросы