问题描述
- 关于数据结构栈的赋值
-
#include
using namespace std;typedef int SElemType; //???????????????ù????????
#define STACK_INIT_SIZE 100 //?¨???????????±??×??ó??
#define STACKINCREMENT 10 //?¨???????????????????????ó??typedef struct{
SElemType *base; //?¨???á????:??
SElemType *top;
int stacksize;
}SqStack;bool InitStack(SqStack &s){ //??????????????
s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(s.base=NULL) return false;
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return true;
}bool GetTop(SqStack s,SElemType &e){
if(s.top==s.base) return false; e=*(s.top-1); //top????×??????ò×???????????·? return true;
}
bool Push(SqStack &s,SElemType e){ //????????????????????
if(s.top-s.base>=STACK_INIT_SIZE){
s.base=(SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(s.base==NULL) return false;
s.top=s.base+s.stacksize; //??top????????????
s.stacksize+=STACKINCREMENT;
}
*(s.top)=e; //????top?????ù????????????????top????????????
s.top++;
return true;
}bool Pop(SqStack &s,SElemType &e){ //????????e ????????
if(s.base==s.top) return false;
s.top--; //????top×????????ó????????????????
e=*s.top;
return true;
}void main(){
SqStack s;
int elem=1;InitStack(s); *(s.top)=5; cout<<*s.base<<endl;
// Push(s,elem);
/* for(int i=1;i<=2;i++){
Pop(s,elem);
cout<<elem<<endl;
}*/
}用的是vc++6.0 这样我给栈顶赋值,编译的时候没问题,为什么执行的时候就会停止工作?求解
解决方案
s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(s.base=NULL) return false;
刚申请完内存,你又赋空值,内存泄露了,当然运行不了。
解决方案二:
指针没有分配,或者下标越界等等。程序能编译不能运行这很正常。尤其是C++这种比较原始而简陋的语言,编译器的检查更是少的可怜。你需要学会调试。
解决方案四:
if(s.base=NULL) return false; 发现问题了,是这句话,要哭了,果然还是用java出现的问题少些,这个=真是要命。
解决方案五:
你需要学会调试编译的时候没问题