C内存泄漏尽管免费
发布时间:2020-12-16 03:07:26 所属栏目:百科 来源:网络整理
导读:在使用Valgrind调试我的程序时,尽管我认为有效的电话是免费的,但我发现内存泄漏.首先,分配内存并存储的代码: row = malloc(sizeof(Row)); row-columns = malloc(sizeof(char*) * headcnt); row-numcol = 0; ... row-numcol = colcnt; rows = realloc(rows,(
在使用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错误,并且自由(& rows [i])抱怨双重空格.我对C很新,并且会感谢任何人可能拥有的任何指针(ahem). 解决方法
做行[rowcnt] = * row;有效地复制您分配的内存.您的数组行应该是一个指针数组.也像Oli Chalesworth指出,你自由的列应该是一个免费的所有列.
rows = malloc(count * sizeof(Row*)); // This is probably done somewhere 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++){ free(rows[i]->columns); } free(rows); exit(0); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |