【新手】c++,执行出错,编译没错。
【新手求助】c++,,执行出错,,编译没错。。
#include<iostream.h>
struct DblNode{
int data;
DblNode *lLink,*rLink;
DblNode(int d,DblNode *left=NULL,DblNode *right=NULL){data=d;lLink=left;rLink=right;}
};
class DblList{
private:
DblNode *head;
public:
DblList(){head=new DblNode(0);head->lLink=head->rLink=head;}
~DblList();
int Length()const;
void build(int val);
///bool Insert(int i,int val,int d);
//bool Remove(int i,int& x,int d);
//DblNode* Index(int i,int d);
//DblNode* Search(const int x);
DblNode* getHead(){return head;}
bool IsEmpty(){return head->lLink==head;}
void print(int d);
};
DblList::~DblList(){
DblNode *p=head,*q;
while(p){
q=p;
p=p->lLink;
delete q;}
}
int DblList::Length()const{
int count=0;
DblNode *ptr=head;
do{
count++;
ptr=ptr->lLink;
}while(ptr!=head);
return count;
}
void DblList::build(int val){
DblNode *rear=head;
while(val--){
rear->rLink=new DblNode(val);
rear->rLink->rLink=head;
rear->rLink->lLink=rear;
head->lLink=rear->rLink;
rear=rear->rLink;}
}
void DblList::print(int d){
DblNode *p=head;
cout<<head->data;
if(d==0)
do{p=p->rLink;
cout<<"-->"<<p->data;
}while(p->rLink!=head);
else
do{p=p->lLink;
cout<<"-->"<<p->data;
}while(p->lLink!=head);
}
int main(){
DblList MyDblList;
int i=5;
// while(i--)
MyDblList.build(i);
MyDblList.print(0);
return 1;
}
错在那里啊,,麻烦各位指教一下。。。。
问题补充:
貌似是指针运用出错,但是找不到错哪儿了啊。。救命啊
------解决方案--------------------
析构函数里delete指针的时候错了,去掉析构运行正常,你这个指针分配的也够乱的,在好好理理你的析构函数就行了
------解决方案--------------------
析构函数里的指针释放顺序错误,应该从链表的最后往前依次释放
------解决方案--------------------
。。。。。。。。。。
#include<iostream.h>
struct DblNode{
int data;
DblNode *lLink,*rLink;
DblNode(int d,DblNode *left=NULL,DblNode *right=NULL){data=d;lLink=left;rLink=right;}
};
class DblList{
private:
DblNode *head;
public:
DblList(){head=new DblNode(0);head->lLink=head->rLink=head;}
~DblList();
int Length()const;
void build(int val);
///bool Insert(int i,int val,int d);
//bool Remove(int i,int& x,int d);
//DblNode* Index(int i,int d);
//DblNode* Search(const int x);
DblNode* getHead(){return head;}
bool IsEmpty(){return head->lLink==head;}
void print(int d);
};
DblList::~DblList(){
DblNode *p=head,*q;
while(p){
q=p;
p=p->lLink;
delete q;}
}
int DblList::Length()const{
int count=0;
DblNode *ptr=head;
do{
count++;
ptr=ptr->lLink;
}while(ptr!=head);
return count;
}
void DblList::build(int val){
DblNode *rear=head;
while(val--){
rear->rLink=new DblNode(val);
rear->rLink->rLink=head;
rear->rLink->lLink=rear;
head->lLink=rear->rLink;
rear=rear->rLink;}
}
void DblList::print(int d){
DblNode *p=head;
cout<<head->data;
if(d==0)
do{p=p->rLink;
cout<<"-->"<<p->data;
}while(p->rLink!=head);
else
do{p=p->lLink;
cout<<"-->"<<p->data;
}while(p->lLink!=head);
}
int main(){
DblList MyDblList;
int i=5;
// while(i--)
MyDblList.build(i);
MyDblList.print(0);
return 1;
}
错在那里啊,,麻烦各位指教一下。。。。
问题补充:
貌似是指针运用出错,但是找不到错哪儿了啊。。救命啊
------解决方案--------------------
析构函数里delete指针的时候错了,去掉析构运行正常,你这个指针分配的也够乱的,在好好理理你的析构函数就行了
------解决方案--------------------
析构函数里的指针释放顺序错误,应该从链表的最后往前依次释放
------解决方案--------------------
。。。。。。。。。。