c - 使用 void 在 C 中分配和释放二维数组

标签 c malloc multidimensional-array

这个想法是只使用两个函数,这两个函数可以分配和释放编译时未知的给定数据类型的二维数组。我写的代码在释放函数中崩溃了,但我不明白为什么。这是代码:

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/22440033/

相关文章:

c++ - 稀疏矩阵加法条件

c - 大括号的不同位置

c - 结构体中指向结构体动态数组 C 的指针

C++ : 2-D Pointer Array Sorting: Selection Sort doesn't work for certain instance

c - 我的老师告诉我我的代码是垃圾,为什么?

c - 在 C 中动态分配的结构中使用位域可以吗?

C释放结构指针成员

c++ - 为什么这个程序在我插入前 2 个输入后崩溃

c - 传递长度为 "constant"的二维数组

python - python支持哪些模块来生成c代码?