关于C/C++中的地址读取错误问题

C语言 码拜 8年前 (2017-04-24) 1266次浏览
本人刚开始学习数据结构,今天在照着书上打了单链表的代码之后,尝试创建主函数测试单链表的功能,但遇到地址读取错误的问题,一直得不到解决,希望论坛的各位高手帮帮忙。
本人是在VS2013上测试的。
以下是代码:
#include <stdio.h>
typedef struct LNode{//定义单链表的数据结构类型
int date;
struct LNode *next;
}LNode, *LinkList;
LinkList L;
void InitLinkList(LinkList &l){//初始化单链表
if (!(l = new LNode))
printf(“NULL”);
l->next = NULL;
}
void CreateLinkList_L(LinkList &l, int n){//顺序输入n个数据元素插入单链表尾部
LinkList p,r;
InitLinkList(L);
r = l;
printf(“please enter the value of node:\n”);
for (int i = 1; i <= n; i++){
p = new LNode;
scanf_s(“%d”, &p->date);
r->next = p;
r = p;
}
l->next = NULL;
}
void DisplLinkList(LinkList &l){//输出单链表中的元素
LinkList p;
for (p = l->next; p; p = p->next){//此处无法进入循环
printf(“%d”, p->date);
}
printf(“\n”);
}
void main(){
CreateLinkList_L(L, 5);
DisplLinkList(L);
}
文中标注的红色的区域是无法执行的区域。每次执行到这里就终止了  ,根本无法进入循环
解决方案

20

原因是你CreateLinkList_L函数最后让l->next = NULL; 这样之后当然进不了循环了
DisplLinkList中的p也就为NULL

10

void CreateLinkList_L(LinkList &l, int n) //顺序输入n个数据元素插入单链表尾部
{
    LinkList p,r;
    InitLinkList(L);
    r = l;
    printf("please enter the value of node:\n");
    for (int i = 1; i <= n; i++)
    {
        p = new LNode;
        scanf_s("%d", &p->date);
        r->next = p;
        r = p;
    }
    r->next = NULL; //**************不是l->next,是r->next或p->next**********************************
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于C/C++中的地址读取错误问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)