在Valgrind調試我的程序時,儘管我認爲有效的調用是免費的,但我發現內存泄漏。首先,被分配內存和存儲它的代碼:C內存泄露儘管免費
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是新手,並且會很感激任何人可能擁有的指針(ahem)。
您需要包括行類型的聲明。 – unwind 2011-02-08 14:30:52
你有沒有試過叮叮? – ustun 2011-02-08 14:39:26
這裏可以使用更多的代碼。目前我有點困惑,爲什麼你爲一行中的每一列設置`malloc`空間,然後將row-> numcol設置爲零。 – GrahamS 2011-02-08 14:39:40