c++,请问这有什么问题
#include<iostream>
using namespace std;
class book
{public:
char bookname[20];double price;int number;book *next;
void input(book *&);void display( book *);void borrow();void restore();
};
void input(book *&head)
{book *p1,*p2;
p1=new book;
cout<<"输入p1"<<endl;
cin>>p1->bookname>>p1->price>>p1->number;
while(p1->price!=0.0){if(head==NULL)head=p2=p1;
else{ p2=p2->next,p2=p1;}
p1=new book;cin>>p1->bookname>>p1->price>>p1->number;}
p2->next=NULL;
delete p1;
return;}
void display( book *head)
{while(head){cout<<head->bookname<<" "<<head->price<<" "<<head->number<<endl;
head=head->next;}}
int main()
{book *head;head=NULL;
input(head);
display(head);
}
求解
只能显示第一组数,后面的999.exe 中的 0x013f1955 处有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcded 时发生访问冲突
[解决办法]
void input(book *&head)
函数体重分配了不要delete,如果delete掉,和局部变量的效果差不多了!
可以在不再使用的时候再delete,也就是diplay之后不再使用此对象
[解决办法]
while(p1->price!=0.0)
{
if(head==NULL)
{
head=p2=p1;
}
else
{
p2=p2->next,p2=p1;//你这句编译过得了?而且你要p2=p2->next;干嘛,都被下一句覆盖了。。。应该是p2->next=p1;p2=p1;吧
}
p1=new book;
cin>>p1->bookname>>p1->price>>p1->number;
}
p2->next=NULL;
delete p1;//这个会让你delete最后一个book,你的代码应该只生成一个头结点,其他结点都没处理啊,怎么会出错呢?错误的没想明白
return;}