在函数内动态分配2D数组(使用指针返回已分配对象的地址)

时间:2011-09-01 21:30:24

标签: c arrays pointers dynamic allocation

我想知道如何使用函数参数将指针传递给动态分配的数组。该函数应该分配数组10x10(为简单起见,跳过检查)。这可能吗?我究竟做错了什么?提前谢谢。

int array_allocate2DArray ( int **array, unsigned int size_x, unsigned int size_y)
{
    array = malloc (size_x * sizeof(int *));

    for (int i = 0; i < size_x; i++)
        array[i] = malloc(size_y * sizeof(int));

    return 0;
}

int main()
{
    int **array;
    array_allocate2DArray (*&array, 10, 10);
}

2 个答案:

答案 0 :(得分:1)

当我遇到类似的问题时,我遇到过这篇文章(我正在寻找一种在C中动态分配字符串数组的方法)。我更喜欢从函数返回数组指针。以下为我工作(我为你的整数数组调整了它)。我随意为每个值设置了99,所以我可以看到它们在main中打印出来。

int **array_allocate2DArray(unsigned int size_x, unsigned int size_y)
{
        int i;
        int **arr;

        arr = malloc(size_x*(sizeof(int*)));

        for (i=0 ; i<size_x ; i++){
                arr[i] = malloc(size_y);
                *arr[i] = 99;
        }

        return arr;

}

int main(void)
{
        int i;
        int **arr;

        arr = array_allocate2DArray(10, 10);

        for (i=0 ; i<10 ; i++){
                printf("%d\n", *arr[i]);
                free(arr[i]);
        }
        free(arr);

        return 0;
}

答案 1 :(得分:0)

尝试这样的事情:

int array_allocate2DArray (int ***p, unsigned int size_x, unsigned int size_y)
{
    int **array = malloc (size_x * sizeof (int *));

    for (int i = 0; i < size_x; i++)
        array[i] = malloc(size_y * sizeof(int));

    *p = array;
    return 0;
}


int **array;
array_allocate2DArray (&array, 10, 10);

我使用临时p来避免混淆。