编辑:从“struct Bar *”类型分配类型'struct Bar'时出现不兼容的类型

时间:2015-05-05 19:30:03

标签: c memory-management struct

编辑:清理代码以避免混淆问题。至于问题:我想分配大小结构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’

2 个答案:

答案 0 :(得分:2)

  1. 此行Foo2 *a = (Foo2 *) malloc(sizeof(Foo2))应为Foo2 * a = malloc(sizeof(Foo2))
  2. 由于a->b = (Bar*) malloc(sizeof(Bar));不是指针
  3. ,因此不需要行b
  4. 这些东西:

    typedef struct ForwardClassTest ForwardClassTest; typedef struct Foo2 Foo2; typedef struct Bar Bar; typedef struct ForwardClassTest {

  5. 不是必需的

    1. 这是错误的void* main(char* args[]){应该是int main(int, char**),因为没有使用参数。
    2. 使用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);
}