单链表输入数据时自动退出程序
这是哪里出了问题
```c++
#include<iostream>
using namespace std;
#define OK 1
#define ERROR -1
#define OVERFLOW -2
typedef struct
{
string name;
int num;
}Book;
typedef struct LNode
{
Book data;//节点的数据域
struct LNode *next;//节点的指针域
}LNode,*LinkList;//LinkList为指向结构体LNode的指针类型
int InitList(LinkList &L)
{
L=new LNode;//生成新节点作头节点
L->next=NULL;//令头节点的指针域为空
cout<<"已执行"<<endl;
return OK;
}
void input(LinkList &L)
{
int n;
cout<<"请输入一个整数N"<<endl;
cin>>n;
cout<<"请输入书籍信息"<<endl;
LNode *p;//建立一个节点p
for(int i=0;i<n;i++)
{
cin>>p->data.name>>p->data.num;
p=L;
p->next=L->next;
L->next=p;
}
}
void output(LinkList L)//这不用管先
{
int n;
for(int i=0;i<n;i++)
{
// cout<<L->next->data.name<<L->next->data.num;
}
}
int main()
{
LinkList L;
InitList(L);
input(L);
return 0;
}
```
问题出在nput函数,就是你定义了一个指针p,但是没有为其分配内存,因此访问p的成员时会发生未定义的行为。在循环中应该先为p分配内存,比如通过new关键字:
void input(LinkList &L)
{
int n;
cout<<"请输入一个整数N"<<endl;
cin>>n;
cout<<"请输入书籍信息"<<endl;
for(int i=0;i<n;i++)
{
LNode *p = new LNode;
cin>>p->data.name>>p->data.num;
p->next=L->next;
L->next=p;
}
}
循环中的两行语句的顺序应该交换,应该先将新节点p插入到链表头部,再将L指向新节点,否则会导致链表头指针丢失。
void input(LinkList &L)
{
int n;
cout<<"请输入一个整数N"<<endl;
cin>>n;
cout<<"请输入书籍信息"<<endl;
for(int i=0;i<n;i++)
{
LNode *p = new LNode;
cin>>p->data.name>>p->data.num;
p->next=L->next;
L->next=p;
}
}
p没有分配空间
加上p = new LNode;
void input(LinkList &L)
{
int n;
cout<<"请输入一个整数N"<<endl;
cin>>n;
cout<<"请输入书籍信息"<<endl;
LNode *p;//建立一个节点p
p = new LNode;
for(int i=0;i<n;i++)
{
cin>>p->data.name>>p->data.num;
cout<<"请输入书籍信息1111"<<endl;
p=L;
p->next=L->next;
L->next=p;
}
}