在函数中分配双指针返回主

时间:2015-11-29 18:37:43

标签: c pointers

我在main中创建了一个双重int指针,并调用了一个函数,我为此指针分配了位置。

void foo(int **array)
{
    int i, j;
    array = (int **)malloc(sizeof(int *)*(100)); //rows

    for(i=0; i<100; i++)
        array[i] = (int *)malloc(sizeof(int)*(50)); //cols

    array[0][0] = 10;
}

在主要内容中我只有这些行;

int** array;

foo(array);

printf("%d \n", array[0][0]);

结果我得到了分段错误。由于我传递一个指针并且它是在foo方法中分配的,这是否意味着在main方法中它没有被分配?如何在不使foo函数返回双指针的情况下解决它?

2 个答案:

答案 0 :(得分:2)

定义函数的方式:

void foo(int **array);

二维数组是一个局部变量,在函数末尾超出范围。您将丢失已分配的内存,而main函数将无法了解已分配的内存,因为arrayfoo中的main不同。

一种解决方案是在int **中创建main,然后将指针传递给foo中的指针:

void foo(int ***array);

然后,您可以通过传递给mainfoo的指针更新*array中的本地变量;

另一种解决方案是从函数中返回新分配的内存:

int **foo(void);

这是一个经常出现的问题,应该有大量的数据分配代码示例。

答案 1 :(得分:0)

最后,检查一下。更新你的foo功能如下,它应该按照你的期望工作,

void foo(int (***array))
{
    int i;

     *array = (int **) malloc(100*sizeof(int *)); //rows

    for(i=0; i<100; i++){
        (*array)[i] = malloc(50*sizeof(int));} //cols

    *array[0][0] =10;
}

在main函数中,传递数组变量的地址。

foo(&array);

希望这有帮助!