【发布时间】:2016-04-25 02:56:17
【问题描述】:
所以我有一个包含联合的结构如下:
struct FILL{
char *name;
int id;
};
struct TEST{
union{
struct FILL *fill;
int type;
} *uni;
};
我不明白如何访问结构中的工会成员。我一直在尝试这样做:
struct TEST *test_struct, *test_int;
test_struct = malloc(sizeof(struct TEST));
test_struct->uni = malloc(sizeof(struct TEST));
test_struct->uni->fill->name = NULL;
test->struct->uni->fill->id = 5;
test_int = malloc(sizeof(int));
test_int->uni->type = 10;
但是当我尝试这个时我得到了段错误。我访问这些错误吗?不然怎么办?
编辑:对不起,我专注于格式,我搞砸了 TEST 的声明。已经修好了。
【问题讨论】:
-
提供一份完整正确的
struct TEST声明如何?您提交的内容似乎被截断了。 -
不抱歉,这是我的错误,我已经更正了,但这是完整的声明。
-
type在 union 内部的目的是什么,如果您永远无法使用它?您应该将type放在结构中,其余的放在联合中。 -
为什么我永远无法使用它?我的想法是我要么输入要么填写 TEST 结构。
-
我建议您尝试编写一个不动态分配所有内容的版本。现在你正试图理解联合,同时也遇到了动态分配的问题。把这两件事分开弄清楚,然后再考虑把它们结合起来。正如 Fluter 的回答所指出的那样,您当前的问题实际上更多是在分配方面。