传递结构数组
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;
如何传递结构数组?
到目前为止我有这个是全局的:
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;