传递结构数组

Passing an Array of Structures

如何传递结构数组?

到目前为止我有这个是全局的:

typedef struct _line
{
  float val1;
  int val2;
} line;

然后我从文件中读取数据到这个结构中

struct _line* read_file()
{
  typedef struct _line *Lines
  Lines *array = malloc(num_lines * sizeof(Lines));
  //read values into structures here

然后我用值填充数组中的结构。如果我这样做 printf("%d", (*array[1]).val1); 我会在这个特定方法中得到正确的值

然后我return这样的数组

return *array

但是当我这样做时,只有第 0 个结构在我 returned 的方法中正确读取。读取第一个元素只是打印随机值。我做错了什么?

当你return它1时你不应该取消引用数组,它实际上是与函数return类型不兼容的类型,只是

return array;

此外,在读取值之前检查 malloc() 之后的 array != NULL,你并不真的需要 typedef 这会让你的代码有点混乱。

如果我怀疑你编译的代码,那么你的编译器命令中没有启用警告,启用它们可以防止此类问题。


(1) *array 等同于 array[0].

扩展我的评论,您的代码(如您描述和展示的那样)有 undefined behavior:

这是因为您分配了一个 指针数组 ,但您显然没有在该数组中分配指针。因此,当您取消引用一个指针(您尚未分配并且其值不确定,因此将指向一个看似随机的位置)时,您会遇到这种未定义的行为。

不要使用 Line 这样的类型别名,而是使用 结构 名称,比如

struct _line *array = malloc(num_lines * sizeof(*array));

那将分配 num_lines 结构 (而不是指针),然后你像普通数组一样使用它,没有指针取消引用

array[x].val1 = something;

你当然 return 指针 array 按原样:

return array;