先说结论
- 结构体指针需要初始化
- 结构体指针的成员指针同样需要初始化
- 结构体变量定义的时候就已经分配了内存空间,而上面两个确没有
struct test{
int i;
struct buf *p;
} t; //定义结构体t
struct buf{
char data[512];
struct buf *prev;
struct buf *next;
} ;
t定义后里面的成员变量在GCC下已经初始化为0了,但p并没有malloc分配空间,因此对t.p->prev的任何赋值操作都会出错,解决方法:
1、把 struct buf *p 改为 struct buf p;由于定义后已经分配空间,可以直接使用p.prev = &p;
2、malloc分配空间 t.p = (struct buf*) malloc(sizeof(struct buf));p.prev = 之后就可以赋值了****