夏樾 2019-09-14 15:58 采纳率: 0%
浏览 287

链表程序vc6.0可以运行但vs不能运行

应该是没有给p赋初值的原因,vc能通过但vs就不行
/#include
/#include
//链表的建立与输出
struct node//定义结点的类型
{
int num, score;
node* link;
};
void main()
{
node* creat(int n);//函数原型声明
void print(node * h);//函数原型声明
node* head = 0;//定义链头指针并初始化
head = creat(5);//调用creat函数创建链表
print(head);//调用print函数输出链表
}
node* creat(int n)
{
node* h = 0, *p, * q;
int i;
for (i = 1; i <= n; i++)
{

    p=q = (node*)malloc(sizeof(node));//分配一个结点空间
    scanf_s("%d%d", &q->num, &q->score);//输入新结点的值
    q->link = 0;//新结点的指针域置0
    if (h == 0)
        h = q;//第一个结点作为链头结点
    else
        p->link = q;//新结点添加到链表的末尾
    p = q;
}
return h;//返回链头指针

}
void print(node* h)//链表输出函数的定义
{
while (h)//当指针h非空时输出h所指结点的值
{
printf("num=%d\tscore=%d\n", h->num, h->score);
h = h->link;//使h指向下一个结点
}
}

  • 写回答

1条回答

  • 无形有道 2019-09-14 16:50
    关注

    你的代码会导致内存泄漏啊~

    原代码中creat(5)函数只会返回第一个输入的结点,其余输入的节点因为缺失引用而导致内存泄漏哈

    你需要如下修改(共两处即可)

    node* creat(int n)
    {
    node* h = 0, *p, * q;
    int i;
    for (i = 1; i <= n; i++)
    {

    /********* 第一处修改 ************/
    q = (node*)malloc(sizeof(node));//分配一个结点空间
    

    scanf_s("%d%d", &q->num, &q->score);//输入新结点的值
    q->link = 0;//新结点的指针域置0
    if (h == 0)

    /********* 第二处修改 ************/
    h=p=q;//第一个结点作为链头结点
    

    else
    p->link = q;//新结点添加到链表的末尾
    p = q;
    }
    return h;//返回链头指针
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料