c - 返回指向结构数组的指针

标签 c pointers memory struct malloc

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

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;

但是访问这个指针时程序还是崩溃了。如何在函数内创建此数组并返回指向此数组的指针,以便可以安全地访问它?

最佳答案

这个数组是在堆栈上初始化的,但是指针 (arr) 是一个局部变量,所以调用者 main 不能访问它。您不需要使用指针的地址。您可以使用指针本身访问数组。

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;
}

关于c - 返回指向结构数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529820/

相关文章:

memory - 识别导致 strace 挂起的文件

c - 使用 scanf 从标准输入 C 读取文件

c - strstr 的优化版本(搜索具有恒定长度)

C - 初始化指针数组

c++ - 通过函数在共享内存中 boost C++ 结构

java - 如何跟踪 Java 应用程序中已使用的内存?

c - pthread_join() 导致崩溃后指向 int 的指针

c - 在c程序中从txt文件中获取特定数字

c - 结构内部计算的极值和

c - 在指针数组中输入字符串