如何释放在 N+1 mallocs 上分配的 2D 数组?在 C 语言中

How to free a 2D array allocated on N+1 mallocs ? In C

提问人:Jonas Barth 提问时间:9/26/2022 更新时间:9/26/2022 访问量:27

问:

我有一个练习,要求我释放一个 2D 数组,该数组是用 mallocs 分配的。我已经在堆栈和许多网站上搜索过,但我仍然卡住了。

我必须完成一个函数,然后在 arg. 中释放 2D 数组并使其为 NULL。

void FreeMatrix(int*** ptab, int N){
   /// to complete
}

我已经试过,但没有用,还有2张图片是我老师递给我的“帮我”,但我也不太明白。

for (int i = 0; i<N;i++){
   free(ptab[i]);
}
free(ptab);

=> 程序崩溃

提前感谢您的帮助:(第一张图片 第二张图片

阵列 C 多维阵列 malloc 自由

评论


答:

1赞 yano 9/26/2022 #1

由于您使用的是 3 星指针,因此您需要在函数中进行额外的取消引用:

void FreeMatrix(int*** ptab, int N)
{
    for (size_t i=0; i<N; i++)
    {
        // *ptab is an int** type, and that makes (*ptab)[i] an
        // int* type. Presumably, you've malloced N int* types, so
        // free each of those
        free((*ptab)[i]);
    }

    // now free the initial int** allocation
    free(*ptab);
    // and set it to NULL per your requirements
    *ptab= NULL;
}

工作实例

请注意,3 星指针通常被认为是糟糕的设计