如何传递结构数组?
到目前为止,我有这个全球性的:
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 *array
但是当我这样做时,只有第0个结构在我返回的方法中正确读取。读取第一个元素只会打印随机值。我做错了什么?
答案 0 :(得分:0)
当你返回 1 时,你不应该取消引用数组,它实际上是与函数返回类型不兼容的类型,只是
return array;
另外,在读取值之前检查array != NULL
之后的malloc()
,并且您真的不需要typedef
它会使您的代码有点混乱。
如果您编译的代码我怀疑,那么您的编译器命令中没有启用警告,请启用它们以防止出现此类问题。
(1)*array
相当于array[0]
。
答案 1 :(得分:0)
扩展我的评论,您的代码(如您所描述和展示的那样)undefined behavior:
这是因为你分配了一个指针,但你显然没有在该数组中分配指针。因此,当您取消引用指针(您尚未分配且其值不确定,因此将指向看似随机的位置)时,您将具有此未定义的行为。
不使用像Line
这样的类型别名,而是使用结构名称,例如
struct _line *array = malloc(num_lines * sizeof(*array));
那将分配num_lines
结构(而不是指针),然后你像普通数组一样使用它,而不用指针解除引用
array[x].val1 = something;
你当然按原样返回指针array
:
return array;