编辑:清理代码以避免混淆问题。至于问题:我想分配大小结构Foo2的内存。然后分配大小为struct Bar的内存并将该位置分配给a-> b。之后我想将a-> b.x设置为整数值。生成此代码,因此我希望了解为结构分配内存和设置其值的概念。
如何访问a->b
?我知道我无法设置它的指针。
Error: incompatible types when assigning to type ‘struct Bar’ from
type ‘struct Bar *’?
另外,为什么我不能在没有typedef struct Bar
的{{1}}结构后面放Foo2
?
error: unknown type name ‘Bar’
答案 0 :(得分:2)
Foo2 *a = (Foo2 *) malloc(sizeof(Foo2))
应为Foo2 * a = malloc(sizeof(Foo2))
a->b = (Bar*) malloc(sizeof(Bar));
不是指针b
这些东西:
typedef struct ForwardClassTest ForwardClassTest;
typedef struct Foo2 Foo2;
typedef struct Bar Bar;
typedef struct ForwardClassTest {
不是必需的
void* main(char* args[]){
应该是int main(int, char**)
,因为没有使用参数。free
释放内存答案 1 :(得分:1)
由于没有完整的答案,@ ed-heal指出了正确的方向。我找到了解决方案。唯一的方法是在Foo2中添加指向Bar b的指针。
typedef struct Foo2 Foo2;
typedef struct Bar Bar;
struct Bar {
int x;
};
struct Foo2 {
Bar *b;
};
int main(){
Foo2 * a = (Foo2 *) malloc(sizeof(Foo2));
a = (Foo2*) malloc(sizeof(Foo2));
a->b = (Bar*) malloc(sizeof(Bar));
a->b->x = 5;
free(a);
free(a->b);
exit(0);
}