C编程使用free()时的“分段错误(核心转储)”

时间:2017-01-28 14:58:09

标签: c segmentation-fault malloc free core

我正在尝试创建一个二维数组,但是当我在程序结束时使用free时,总是会出现“Segmentation fault(core dumped)”错误。只使用睡眠功能,因为我想看看它是否在创建数组后或之后崩溃,并且程序在我使用free(array)时崩溃

{{1}}

3 个答案:

答案 0 :(得分:1)

您只是在array函数中修改create_array()的本地副本。为了能够修改main()中的指针array,您需要将指针传递给它(即函数需要接收int***)。

更简单地说,你可以从函数中返回 array,然后分配给main()中的array,你就不会'需要传递第一个参数。

答案 1 :(得分:0)

您正在创建动态数组,但您没有返回该数组的引用,这就是您无法释放它的原因。

答案 2 :(得分:0)

您需要按如下方式致电create_array()

int **array;
create_array( &array, N);

然后将其定义为:

int create_array(int*** array, int size)
{
    *array = (int**)malloc(size * sizeof(int*));

    for(int i = 0; i < size; i++)
    {
        (*array)[i] = (int*)malloc(size * sizeof(int));
    }

    printf("Successfully created the array!\n");
    printf("The size of the array is %d * %d = %d", size, size, sizeof(array) / sizeof(int));

    return EXIT_SUCCESS;
}

您仍然会遇到内存泄漏问题,因为您只释放array而没有将array[0]释放到array[N-1]。创建相应的destroy_array()函数会更安全。