这个想法是只使用两个函数,这两个函数可以分配和释放编译时未知的给定数据类型的二维数组。我写的代码在释放函数中崩溃了,但我不明白为什么。这是代码:
void** new2DArray(int row, int col, int typeSize){
void** temp = malloc(sizeof(void*)*row); //EDIT
for (row-=1; row >= 0; row--)
temp[row] = malloc(typeSize*col);
return temp;
}
void free2DArray(void** array, int row, int typeSize){
for (row -= 1; row >= 0; row--)
free( *(array + row*typeSize) );
free(array);
}
对于 3x3 数组,它的调用方式如下:
double** test = (double**) new2DArray(3, 3, sizeof(double));
free2DArray(test, 3, sizeof(double));
释放函数有什么立即错误吗?
最佳答案
free2DArray
看起来不对。您不需要知道类型的大小;你只需释放你分配的 block :
void free2DArray(void** array, int row){
for (row -= 1; row >= 0; row--)
free( array[row] );
free(array);
}
关于c - 使用 void 在 C 中分配和释放二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25345548/