为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我用DELETE释放内存 执行出错呢

为什么我用DELETE释放内存 执行出错呢

C++
慕田峪7551596 2017-11-07 19:24:01
#include<iostream>using namespace std;struct LinkNode{ int data; LinkNode *Next;};class LinkQueue{private: LinkNode *front; LinkNode *rear;public: LinkQueue(); ~LinkQueue(); void Append(const int &e); void Remove(); void Traverse();};LinkQueue::LinkQueue(){ front=rear=new LinkNode(); rear->Next=NULL; }LinkQueue::~LinkQueue(){ LinkNode *p=front->Next; LinkNode *q; while(p) {  q=p;  delete p;  p=q->Next; } delete front;}void LinkQueue::Append(const int &e){ LinkNode *p=new LinkNode; p->data=e; p->Next=NULL; if(front->Next==NULL) {  front->Next=p;  rear=p; } else {  rear->Next=p;  rear=p; } }void LinkQueue::Remove(){ LinkNode *p=front->Next; if(p->Next!=NULL)    front->Next=p->Next;}void LinkQueue::Traverse(){    LinkNode *p=front->Next; while(p) {  cout<<p->data<<" ";  p=p->Next; }}void main(){ LinkQueue *l=new LinkQueue(); l->Append(5); l->Append(4); l->Append(3); l->Append(2); l->Append(1); l->Remove();  l->Remove(); l->Traverse(); //delete l;}
查看完整描述

1 回答

已采纳
?
慕移动6052691

TA贡献22条经验 获得超7个赞

修改析构函数如下:

LinkQueue::~LinkQueue()

{

LinkNode *p=front->Next;

LinkNode *q;

while(p)

{

q=p->Next;

delete p;

p=q;

}

delete front;

};


另应修改Remove函数如下:否则会内存泄露

void LinkQueue::Remove()

{

LinkNode *p=front->Next;

if(p!=NULL)

{

front->Next=p->Next;

delete p;

}

}


查看完整回答
1 反对 回复 2017-11-08
  • 1 回答
  • 0 关注
  • 1162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信