提问人:Jonas Barth 提问时间:9/26/2022 更新时间:9/26/2022 访问量:27
如何释放在 N+1 mallocs 上分配的 2D 数组?在 C 语言中
How to free a 2D array allocated on N+1 mallocs ? In C
问:
我有一个练习,要求我释放一个 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);
=> 程序崩溃
答:
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 星指针通常被认为是糟糕的设计
评论