在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