先说结论

结构体指针需要初始化 
 结构体指针的成员指针同样需要初始化   
 结构体变量定义的时候就已经分配了内存空间,而上面两个确没有 

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 =  之后就可以赋值了****