首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

刚学C,请问个栈的有关问题,请下

2012-02-14 
刚学C,请教个栈的问题,请高手指点下下面这段程序,运行时老报段错误,请大虾们帮帮忙#includestdio.h#incl

刚学C,请教个栈的问题,请高手指点下
下面这段程序,运行时老报段错误,   请大虾们帮帮忙
#include   <stdio.h>
#include   <string.h>
#include   <stdlib.h>
#define   MAXNUM   1024     //   最大元素数
#define   FALSE   0
#define   TRUE   1
typedef   char   Elemtype;

//   栈结构体
typedef   struct{
Elemtype   stack[MAXNUM];
        int   top;
}   sqstack;

//   初始化栈
int   initStack(sqstack   *s)
{
        if   (   (   s=(sqstack   *)malloc(sizeof(sqstack))   )   ==   NULL   )
                return   FALSE;
s-> top   =   -1;
return   TRUE;
}  

//   入栈操作
int   push(sqstack   *s,   Elemtype   x)
{
if   (   s-> top   > =   (MAXNUM-1)   )
{
return   FALSE;
}
s-> top++;
s-> stack[s-> top]   =   x;
return   TRUE;
}

//   出栈操作
Elemtype   pop(sqstack   *s)
{
Elemtype   x;
if   (   s-> top   <   0   )
return   FALSE;
x   =   s-> stack[s-> top];
s-> top--;
return   x;
}

//   取栈顶元素
Elemtype   getTop(sqstack   *s)
{
if   (   s-> top   <   0   )
return   NULL;
return   s-> stack[s-> top];
}

//   判断栈是否为空
int   Empty(sqstack   *s)
{
if   (s-> top   <   0)
return   TRUE;
        return   FALSE;
}

//   置空操作
void   setEmpty(sqstack   *s)
{
s-> top   =   -1;
}
//typedef   char   Elemtype;
void   reverse(char   str[100])
{
int   len;
len   =   strlen(str);
int   i;
sqstack   *s;
initStack(s);
for   (i=0;   i <len;   i++)
{
push(s,   str[i]);
}

//   把字符串的顺序倒过来
for   (i=0;   i <len;   i++)
{
str[i]   =   pop(s);
}
}

int   main(void)
{
char   str[100];
gets(str);
reverse(str);
printf( "%s\n ",   str);
return   0;
}


[解决办法]
sqstack *initStack()
{
sqstack *s = (sqstack *)malloc(sizeof(sqstack));
if(s) s-> top = -1;
return s;
}
...
void reverse(char str[100])
{
...
sqstack *s = initStack();
if(!s) ...
[解决办法]
单步运行程序,
检查你的指针是否都是有效的。

段错误,
多是因为使用了非法的指针引起
[解决办法]
// 初始化栈
sqstack *initStack()
{
sqstack *s = (sqstack *)malloc(sizeof(sqstack));
if (s == NULL)
{
printf( "\a ");
exit(1); // 初始化不成功则无法继续其他操作,直接退出
}
s-> top = -1;
return s;
}

void reverse(char str[100])
{
int len;
len = strlen(str);
int i;
sqstack *s = initStack();
...
------解决方案--------------------


sqstack *s;
initStack(s);
initStack传入的形参,函数内部对s赋值对外面s值无效
[解决办法]
解决了就好,,,结贴吧,,,祝福
[解决办法]
结帖别忘了分...

热点排行