如何在C中返回指向结构数组的指针?

时间:2018-09-13 05:32:05

标签: c pointers struct

我创建了一个函数,该函数用int填充结构的值,并应该返回指向该结构的指针。但是,当我打印指针引用的内容时,它会打印垃圾值。

这是我的代码:

#include <stdlib.h>
#include <stdio.h>

struct Map * collect_values(int n, int *arr);

struct Map{
    int value, position;
};

int main(){
    int size, i;
    scanf("%d", &size);
    int *arr = (int*) malloc(size*sizeof(int));
    struct Map *p = collect_values(size,arr);

    for(i = 0; i < size; i++){
        printf("%d : %d\n", p[i].value, p[i].position);
    }
    return 0;
}

struct Map * collect_values(int n, int *arr){
    int i, position = 0;
    struct Map array[n];
    for(i = 0; i < n; i++){
        scanf("%d",&arr[i]);
        array[i].value = arr[i];
        array[i].position = position;
        position++;
    }
    struct Map *ptr = &array[n];
    return ptr;
}

我正在对文件中的值进行流水线处理,因此scanf()可以正常工作,并且我已经从collect values()中进行了打印,因此我知道它可以正确创建结构。

但是,当我从main方法打印时,输出为:

-485221568 : 32766
-1529319768 : 32767
24 : 48
-485221520 : 32766
-485221776 : 32766
32766 : 0
872480919 : -968757580
0 : 0
0 : 0
0 : 0

我尝试使用p[i]->value,但无法编译。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

该结构在本地声明,因此在其作用域(即在其中声明的功能)结束后“死亡”,并导致“垃圾”值。

您应该

  1. 在调用方函数中本地创建结构,并将其(按地址)传递给填充函数
  2. 在填充函数中使用malloc创建结构,返回其指针,并在完成后在调用方函数中将其释放