gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:29:49 24 4
gpt4 key购买 nike

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

这是我的代码:

#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() 工作正常,并且我已从收集值() 中打印出来,因此我知道它正在正确创建结构。

但是,当我从 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. 在调用函数中本地创建结构并将其(通过地址)传递给填充函数
  2. 在填充函数中使用 malloc 创建结构体,返回其指针,并在完成后在调用函数中释放它

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com