先說結論
- 結構體指針需要初始化
- 結構體指針的成員指針同樣需要初始化
- 結構體變量定義的時候就已經分配了內存空間,而上面兩個確沒有
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 = 之后就可以賦值了****
