这个程序运行的时候为什么会出错

aa12983 2006-02-24 11:48:26
这个程序错在哪里了,望大虾帮忙找找 ,多谢了

#include <iostream>
#include<ctime>
using namespace std;
struct listnode
{int data;
listnode *next;
} ;
class list
{
private:
listnode *first;
listnode *last;
int size;
public:
list();
~list();
friend ostream & operator<<(ostream & os,const list & x)
{
listnode *p=new listnode;
p=x.first;
while(p!=0)
{
os<<p->data<<" ";
p=p->next;



}
os<<endl;
return os;
}
void insert(int x);
};
list::list(): first(0),last(0),size(0){}


list::~list()
{
listnode *p=new listnode;
listnode *q=new listnode;
p=first;
while(q->next!=0)
{
q=p;
delete p;
p=q->next;

}
}
void list::insert(int x)
{
listnode *p=new listnode;
p->data=x;
p->next=0;
if (first==0)
{
first=last=p;
}
else
{
last->next=p;
last=p;
}
size++;

}
int main()
{
list list1;
srand((unsigned int)time(NULL));
for(int i=0;i<10;i++)
{
list1.insert(rand() % 10);
}

cout<<list1;
return 0;
}
...全文
86 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zark 2006-02-25
  • 打赏
  • 举报
回复
因为这个析构函数可以说是"不知所云".
list::~list()
{
listnode *p=new listnode;
listnode *q=new listnode;
p=first;
while(q->next!=0)
{
q=p;
delete p;
p=q->next;

}
}

改成
list::~list()
{
listnode *p;
listnode *q;
p=first;
while(p->next!=0)
{
q=p->next;
delete p;
p=q;
}
}

下次用中间变量时,尽量不要把p和q,或是i和l这样的对子拿出来考验自己的眼睛.

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧