Утечка памяти C, несмотря на то, что она свободна

При отладке моей программы с помощью Valgrind я обнаружил утечку памяти, несмотря на то, что я считал эффективными вызовами free. Во-первых, код, который выделяет память и сохраняет ее:

    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);
}

Объявление Row:

typedef struct {
    char** columns;
    unsigned short int numcol;
} Row;

Row* rows = NULL;

Что еще хуже, эта программа иногда вызывает ошибку glibc на ] free (& rows [i]) , который жалуется на двойное освобождение. Я новичок в C и был бы признателен за любые указатели (кхм), которые могут быть у кого-то.

10
задан zchtodd 8 February 2011 в 14:35
поделиться