返回指向结构数组的指针

加布里埃尔·索尔

假设我必须创建一个在堆上分配的结构数组,并返回一个指向该结构数组的指针。

typedef struct Pair {
    int x;
    int y;
} Pair;

Pair** foo(int n, int m, int length)
{
    Pair* arr = malloc(sizeof(*arr) * length);

    for (int i = 0; i < length; ++i) {
        arr[i].x = n++;
        arr[i].y = m++;
    }

    return &arr;
}

当我编译包含此功能的程序时,它警告我正在返回局部变量的地址。我认为这是因为指针是在函数内(即在堆栈上)初始化的,因此它被视为局部变量。

当我编译它,忽略此警告并继续运行它时,访问返回的指针时程序崩溃。

我尝试过动态分配指针:

Pair** ptr = malloc(sizeof(**ptr));
ptr = &arr;
...
return ptr;

但是访问此指针时程序仍然崩溃。如何在函数中创建此数组并返回指向该数组的指针,以便可以安全地访问它?

麦克特25

如果要使用指向结构数组的指针,可以将函数签名从Pair**更改为Pair*


如果您仍然想要一个指向指针数组的指针,请Pair为的每个索引分配一个结构内存arr

for(int i = 0; i < length; ++i){
    arr[i] = malloc(sizeof(Pair));
    ...
}

无需返回&arr,您可以声明arr

Pair** arr = malloc(sizeof(Pair*) * length);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章