小错误变成大错误 不知道该怎么改了 应该是指针悬挂问题吧

原创 2012年03月26日 17:08:51

不能正常退出,以确定是析构函数的问题,而且是当前指针current的事,先放着做遗留问题吧,真没时间耗了,先往下做,会变好的 ,  那位要是看到了 ,希望给指点,帮改之,谢了!

///////////"ListNode"/////////////////////
#ifndef NULL
#define NULL 0
#endif

class List;
class ListNode{
friend class List;
private:
char element;
ListNode* Next;
public:
ListNode(const char& e,ListNode* N=NULL):element(e),Next(N){}
ListNode():Next(NULL){}
~ListNode(){}
};

/////////////"List"/////////////////

#include"ListNode.h"

#include"h.h"


class Bracket;
class List{
friend class Bracket;
private:
ListNode* head;
ListNode* current;
public:
List(){head=new ListNode();current=head;}

~List(){MakeEmpty();delete head;delete current; }
int Is_Empty()const{return head->Next==NULL;}
void MakeEmpty(){while(!Is_Empty()) PopFirst();}
void EnList(const char& e)
{
  ListNode* p=new ListNode(e,current->Next);
  current=current->Next=p;
}
const char& ShowFirst(){ return head->Next->element;}
void PopFirst()
{
  ListNode* p=head->Next;
  head->Next=p->Next;
  delete p;
}
};

/////////////"Stack"////////////


#include"h.h"

class Bracket;
static const int InitSize=10;
class Stack{
friend class Bracket;
private:
char* Array;
int top;
int MaxSize;
void DoubleSize(int Max);
public:
Stack():top(-1),MaxSize(InitSize){Array=new char[MaxSize];}
~Stack(){delete []Array;}
int Is_StackEmpty()const{return top==-1;}
int Is_StackFull()const{return top==MaxSize-1;}
void EnStack(const char& e);
void PopStack();
const char& ShowTop(){ return Array[top];}
};

void Stack::EnStack(const char& e)
{
if(++top==MaxSize) DoubleSize(2*MaxSize);
Array[top]=e;
}

void Stack::DoubleSize(int Max)
{
char* oldArray=Array;
Array=new char[Max];
int j;
for(j=0;j<=top;j++) Array[j]=oldArray[j];
MaxSize=Max;
delete[]oldArray;
}

void Stack::PopStack()
{
top--;
}

/////////////"Bracket"/////////////////

#include"Stack.h"
#include"List.h"
#include"h.h"

class Bracket{
private:
List L;
Stack S;
public:
Bracket(const List& Li,const Stack& St):L(Li),S(St){}
~Bracket(){}
friend istream& operator>>(istream& is,Bracket& b);
friend ostream& operator<<(ostream& os,Bracket& b);
};


istream& operator>>(istream& is,Bracket& b)
{
cout<<"Please input words:"<<endl;
char c;
while(cin.get(c)&&c!='#')
{
  if(c=='('||c=='{'||c=='['){ b.S.EnStack(c);   b.L.EnList(c);}
  else if(c==')'||c=='}'||c==']')
  {
   if(b.S.Is_StackEmpty())cout<<"ERROR!!!The first one can not be RIGHT!!"<<endl;
   else if(c==')'&&b.S.ShowTop()=='('){b.S.PopStack();b.L.EnList(c);}
   else if(c=='}'&&b.S.ShowTop()=='{'){b.S.PopStack();b.L.EnList(c);}
   else if(c==']'&&b.S.ShowTop()=='['){b.S.PopStack();b.L.EnList(c);}
   else cout<<"ERROR! Mach to NOONE!!"<<endl;
  }
  else b.L.EnList(c);
}//end while
return is;
}


ostream& operator<<(ostream& os,Bracket& b)
{
cout<<"Output the word:"<<endl;
char c;
while(!b.L.Is_Empty())
{
  c=b.L.ShowFirst();
  b.L.PopFirst();
  cout.put(c);
}
cout<<endl;
return os;
}

////////////////"h"///////////////////////

#ifndef _H_H
#define _H_H
#endif


#include<iostream>
using namespace std;

//////////////////"main"/////////////////////

#include"Bracket.h"

int main()
{

List L;
Stack S;
Bracket B(L,S);
cin>>B;
cout<<"--------->"<<endl;
cout<<B;
cout<<endl;

return 0;
}

ViewHolder模式获取控件空指针异常,小错误很坑爹

在用ViewHolder模式是用以下方式加载控件:

实习心得(四) 小错误引发的大问题

实习过程中犯错肯定是难免的,由于一些小错误而引发的大问题导致浪费了比较多的时间也是有的,给出几个坑,希望大家以后不会再跳。         内存泄露的真相         第一次让测试的同学帮忙测...

【S5PV210学习笔记】小错误引发大问题(1)

再低级的错误,也是错误,是因为有一些细节没有注意到,高手往往高在细节之处。共勉之。 一、裸机移植标准输入输出函数(stdio) 跟着教学视频进行移植,下载调试发现串口调试助手没有任何输出。经过一番折腾...
  • wen2758
  • wen2758
  • 2017年01月30日 15:02
  • 165

【S5PV210学习笔记】小错误引发大问题(2)

五、uboot移植,添加重定位代码后无法启动 移植重定位的代码,程序烧录运行无任何现象,即之前移植好的功能都不见了。 老办法,添加LED灯点亮的代码,发现程序第一句都没有执行。程序起始代码如下图所示,...
  • wen2758
  • wen2758
  • 2017年01月30日 16:51
  • 146

自定义adapter的基础上Listview优化方案以及几个小错误(checkbox吃掉点击事件以及对象重复问题)

每次adapter运行都有一个getcount,有多少条就调用多少次getview,就会解析多少次xml文件(创建view,条数多了很消耗时间),13年谷歌提出了一个机制,每次只缓存一屏幕多几个,把划...

PAT A1038 Recover the Smallest Number 算法问题和关于'0'和0的小错误

//ac,改了一次,s[0]!='0',我写成了s[0]!=0 //注意连接起来最小才是最小 //+表示字符串的连接 //注意去除前导0总是要考虑字符串长度为0,A1060也是这样的 #incl...

C++中指针悬挂问题的产生以及如何避免

C++中当对象中含有指针数据成员时,由于使用默认的构造函数(拷贝构造函数,以及默认赋值函数)就可能造成指针悬挂问题。 首先分析一下产生指针悬挂的机理。假设我们自己使用一个String类,包含是一个指...

Android开发中很少人才知道的一些解决小错误的方法(一直更新中)

1.android.content.res.Resources$NotFoundException:String resource ID #0x86     今天写程序的时候,出现这样的...

C++中的指针悬挂问题(内存泄漏)

我们知道赋值运算符是双目运算符,如果用户没有自定义赋值运算的函数,那么系统将自动生成一个默认的对象赋值运算符使对象能够赋值,比如有两个对象c1(10,20),c2;执行赋值运算的时候:c2=c1;在这...

poj 1416 Shredding Company (应该是用dfs吧,但是想了一下午不知道怎么递归来做,所以暴力做了)

Shredding Company Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5381   Accepted...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小错误变成大错误 不知道该怎么改了 应该是指针悬挂问题吧
举报原因:
原因补充:

(最多只允许输入30个字)