В отладке моей программы с Valgrind я обнаружил утечку памяти, несмотря на то, что, как я думал, были эффективными призывами к бесплатному. Во-первых, код, который выделяет память и сохраняет ее:
row = malloc(sizeof(Row));
row->columns = malloc(sizeof(char*) * headcnt);
row->numcol = 0;
...
row->numcol = colcnt;
rows = realloc(rows, (rowcnt+1) * sizeof(Row));
rows[rowcnt++] = *row;
Код, ответственный за освобождение памяти:
void cleanUp(){
int i = 0;
int j = 0;
for (i = 0; i < rowcnt; i++){
for (j = 0; j < rows[i].numcols; j++){
free(rows[i].columns[j]);
}
free(&rows[i]);
}
free(rows);
exit(0);
}
Объявление строки:
typedef struct {
char** columns;
unsigned short int numcol;
} Row;
Row* rows = NULL;
Хуже того, эта программа иногда вызывает ошибку glibc в free(&rows[i])
, которая жалуется на двойную свободную. Я новичок в C, и буду благодарен за любые указатели (гм), которые могут быть у кого-то.