【问题标题】:How do I free 2D array allocated with malloc?如何释放使用 malloc 分配的二维数组?
【发布时间】:2021-03-05 01:04:21
【问题描述】:

如何释放这个数组?这够了吗?只写free(arr) 就够了吗?我需要释放**arr 吗?如果是,我该怎么做? 提前致谢!

#include <stdio.h>
#include<stdlib.h>
#define N 5
int main(void)
{
    int **arr = malloc(N*sizeof(int*));

    for(int i=0;i<N;i++)
    {
        arr[i] = malloc(N*sizeof(int));
    }
    for(int i=0;i<N;i++)
        free(arr[i]);
    free(**arr);

    return 0;         
}

【问题讨论】:

标签: arrays c malloc free double-pointer


【解决方案1】:

您不需要释放**arr,因为**arrint

除此之外,您应该释放分配的指针arr

线

    free(**arr);

应该是

    free(arr);

【讨论】:

  • 非常感谢!!那么循环 arr[i] 呢?我需要运行它还是只写免费(arr)?
  • @danielevanenko 如果要手动释放分配的所有内容,则需要循环。实际上这里不需要free(),因为在退出进程后,所使用的内存将被操作系统释放。
【解决方案2】:

如果你想声明二维数组而不是指针数组(我认为这是你的想法)

int foo(size_t x, size_t y)
{
    int (*arr)[x][y];

    arr = malloc(sizeof(*arr));

    (*arr)[4][2] = 5;

    free(arr);


}

您可以将它作为任何其他数组进行索引,并且您只需要一个free

【讨论】:

    【解决方案3】:

    **arr 在这种情况下等同于arr[0][0],它实际上是一个整数,而free 函数需要一个指向内存的指针。所以free(**arr) 会“释放”一个伪装成内存指针的整数,这会导致你的程序崩溃。

    你需要做的是释放一个指向 5 个指针数组的指针,这个指针就是 arr。所以你需要free(arr)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2021-05-13
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2016-03-15
      相关资源
      最近更新 更多