【问题标题】:allocating double pointer in a function return segfault in main在函数中分配双指针返回 main 中的段错误
【发布时间】:2015-11-29 18:37:42
【问题描述】:

我在 main 中创建了一个 double 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 函数返回双指针的情况下解决它?

【问题讨论】:

标签: c pointers


【解决方案1】:

你的函数的定义方式:

void foo(int **array);

二维数组是一个局部变量,在函数结束时超出范围。您将丢失分配的内存并且您的main 函数将不知道分配的内存,因为foomain 中的array 是不同的。

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

void foo(int ***array);

然后您可以通过传递给foo*array 的指针更新main 中的局部变量;

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

int **foo(void);

这是一个常见的问题,应该有大量的数组分配代码示例。

【讨论】:

    【解决方案2】:

    最后,检查一下。如下更新您的 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;
    }
    

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

    foo(&array);
    

    希望这会有所帮助!

    【讨论】:

    • 在问题中他明确表示他不想出于某种目的返回指针,我已经给出了代码的返回版本,现在更新它以满足他的要求。
    • 显然提问者不明白他在做什么
    • 我同意你的看法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2016-01-02
    相关资源
    最近更新 更多