请教:c语言段错误
在下在linux下编了一个简单的关于数据结构中 "栈 "的程序,编译一切正常,但是无法运行,而且提示是段错误,希望各位大侠客不吝赐教.
以下我将程序的大致思路贴出来,希望大家帮帮我分析一下,谢谢了.
#include <stdio.h>
#define MAXNUM 888
/*定义栈结构-顺序栈*/
typedef struct
{
int stack[MAXNUM];/*循序栈*/
int top;/*栈指针*/
}STACK,*PSTACK;
/*栈的初始化*/
void init_stack(PSTACK head)
{
head-> top=-1;
// return 0;
}
/*入栈*/
void push_stack(PSTACK head,int x)
{
// if(head-> top> =MAXNUM-1)/*栈满,无法入栈*/
// return 0;
head-> stack[++head-> top]=x;
// return 1;
}
/*出栈*/
void pop_stack(PSTACK head)
{
// if(head-> top <0)/*空栈/
// return 0;
return head-> stack[head-> top--];
}
void main(void)
{
PSTACK pp;
init_stack(pp);
push_stack(pp,1);
push_stack(pp,2);
push_stack(pp,3);
pop_stack(pp)
pop_stack(pp)
pop_stack(pp)
}
------解决方案--------------------百度搜索:Linux core dump
或者去我的blog看看那个文章,gdb看一下core或者gdb走一下就知道了.
------解决方案--------------------晕吧,你的PSTACK pp;是一个指针,没有分配内存的。
pp=(PSTACK)malloc(128*sizeof(STACK));
最后free掉
------解决方案--------------------段错误,基本都是内存出错,也就是指针的问题,可能是指针越界,也可能是没有给指针分配空间,你程序中,非常明显的就是,你只声明了一个指针,但是,你却没有给这个指针分配空间,这样当然会出错。
linux下,分配空间,用g_malloc();释放空间用g_free();要方便一些。
还有就是楼上的,128*sizeof(STACK)这个表达式非常的危险,首先我不明白为什么要乘128,其次,这个表达式容易溢出,在这里,肯定溢出了。一般这个的表达式,会先将乘出来的结果放到左乘数中,在给等号左边的赋值,而常数一般用4个字节,sizeof(STACK)这个数比较大,乘出来结果溢出。
------解决方案--------------------基础知识不过关,好好学习C和数据结构吧。。
------解决方案--------------------g_malloc()就是包装了malloc(),就是返回void *,
g_free(),忽略任何传给它的空指针
------解决方案--------------------内存错误多半由指针没有分配空间造成的
------解决方案--------------------