Jbc_1996 2017-08-16 04:46 采纳率: 0%
浏览 714

小白关于仿照内核的C语言双向循环链表问题

首先代码如下:
    #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 ...

谁能帮我解释一下到底是为什么。。。。。。。。。。。。。。。。。。。。。。。。

  • 写回答

1条回答 默认 最新

  • shen_wei 2017-08-16 07:38
    关注
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?