首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++,请教这有什么有关问题

2013-11-26 
c++,请问这有什么问题#includeiostreamusing namespace stdclass book{public:char bookname[20]doubl

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;}

热点排行