首先代码如下:
#include
#include
#define LONG 10
struct list{
struct list * next;
struct list * prev;
};
struct student{
char name[10];
int id;
struct list * plist;
};
/*添加节点到链表*/
void __add_list(struct list * new_list,struct list * prev,struct list * next){
printf("next->prev = new_list\n");
next->prev = new_list;
printf("new_list->next = next\n");
new_list->next = next;
printf("new_list->prev = prev\n");
new_list->prev = prev;
printf("prev->next = new_list\n");
prev->next = new_list;
}
/*初始化头部*/
void init_list(struct list * headlist){
headlist->next = headlist;
headlist->prev = headlist;
}
int main(){
int i=0;
struct student * students=NULL;
struct list * headlist = NULL;
headlist = (struct list *)malloc(sizeof(struct list));
if(!headlist){
printf("malloc failed ...\n");
return 0;
}
/*初始化头部*/
init_list(headlist);
/*循环10次插入10个节点进链表*/
for(i=0;i students = (struct student *)malloc(sizeof(struct student));
if(!students){
printf("students malloc failed ...\n");
return 0;
}
scanf("%s",students->name);
students->id = 10+i;
__add_list(students->plist,headlist,headlist->next);
}
return 0;
}
程序运行结果如下:
xiaoming
next->prev = new_list
new_list->next = next
然后程序就崩溃了
但是如果我修改了struct student结构体
原来是:
struct student{
char name[10];
int id;
struct list * plist;
};
修改后:
struct student{
struct list * plist;
char name[10];
int id;
};
程序运行结果为:
xiaoming
next->prev = new_list
new_list->next = next
new_list->prev = prev
prev->next = new_list
students malloc failed ...
谁能帮我解释一下到底是为什么。。。。。。。。。。。。。。。。。。。。。。。。