| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2024 人关注过本帖
标题:链表的生成求解,编译没有报错,运行输入值以后,程序就崩溃了。
只看楼主 加入收藏
啦啦boy
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2018-8-13
结帖率:25%
收藏
已结贴  问题点数:5 回复次数:5 
链表的生成求解,编译没有报错,运行输入值以后,程序就崩溃了。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *pNext;
}NODE,*PNODE;
PNODE create_list();
void main()
{
    PNODE phead = NULL;
    phead = create_list();
}
PNODE create_list()
{
    int i,len;
    int val;
    PNODE pnew = NULL;
    PNODE phead = NULL;
    PNODE tail = NULL;
    phead = (PNODE)malloc(sizeof(NODE));
    if(phead==NULL)
    {
        printf("分配失败");
        exit(-1);
    }
    phead = tail;
    printf("请输入需要创建多少个结点?");
    scanf("%d",&len);
    for(i = 0;i<len;i++)
    {
        printf("请输入第%d个结点的数值",i+1);
        scanf("%d",&val);
        pnew = (PNODE)malloc(sizeof(NODE));
        if(pnew==NULL)
    {
        printf("分配失败");
        exit(-1);
    }
        pnew->data = val;
        tail->pNext = pnew;
        pnew->pNext = NULL;
        tail = pnew;
    }
    return phead;
}
搜索更多相关主题的帖子: 输入 malloc Node NULL printf 
2018-08-25 23:19
zhangchm2018
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:32
专家分:129
注 册:2018-8-18
收藏
得分:3 
pnew->data = val;
pnew->pNext = NULL;
if (phead == NULL)
    phead = pnew;
else

    tail->pNext = pnew;      
tail = pnew;

没有考虑链表为空的情况,导致把 pnew 赋给未分配空间的 tail->pNext。

[此贴子已经被作者于2018-8-25 23:53编辑过]

2018-08-25 23:51
啦啦boy
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2018-8-13
收藏
得分:0 
哦哦,我明白你的意思了。但是  没有考虑链表为空的情况时,程序为什么会崩溃呢?它的本质是什么呢?
2018-08-26 09:29
啦啦boy
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2018-8-13
收藏
得分:0 
回复 2楼 zhangchm2018
哦哦,我明白你的意思了。但是  没有考虑链表为空的情况时,程序为什么会崩溃呢?它的本质是什么呢?
2018-08-26 09:34
zhangchm2018
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:32
专家分:129
注 册:2018-8-18
收藏
得分:0 
回复 4楼 啦啦boy
因为链表为空时,tail = NULL,没有空间。
tail->pNext = pnew; 这个语句就出错了。
2018-08-26 10:31
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
收藏
得分:3 
    phead = tail;
    printf("请输入需要创建多少个结点?");
    scanf("%d",&len);

主要问题在于  phead=tail  ,修改为:tail=phead  就正确了

phead=tail  是用 phead 代替 tail
tail=phead  则和上面相反

你分配空间的是 phead ,是需要用tail来代替phead,从而保持phead的地址不变
2018-08-26 22:27
快速回复:链表的生成求解,编译没有报错,运行输入值以后,程序就崩溃了。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051816 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved