当前位置:  技术问答>linux和unix

请教:c语言段错误

    来源: 互联网  发布时间:2016-02-26

    本文导语:  在下在linux下编了一个简单的关于数据结构中"栈"的程序,编译一切正常,但是无法运行,而且提示是段错误,希望各位大侠客不吝赐教. 以下我将程序的大致思路贴出来,希望大家帮帮我分析一下,谢谢了. #include  #define MAXN...

在下在linux下编了一个简单的关于数据结构中"栈"的程序,编译一切正常,但是无法运行,而且提示是段错误,希望各位大侠客不吝赐教.
以下我将程序的大致思路贴出来,希望大家帮帮我分析一下,谢谢了.

#include 
#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->topstack[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)
}

|
晕吧,你的PSTACK pp;是一个指针,没有分配内存的。
pp=(PSTACK)malloc(128*sizeof(STACK));
最后free掉

|
段错误,基本都是内存出错,也就是指针的问题,可能是指针越界,也可能是没有给指针分配空间,你程序中,非常明显的就是,你只声明了一个指针,但是,你却没有给这个指针分配空间,这样当然会出错。
linux下,分配空间,用g_malloc();释放空间用g_free();要方便一些。
还有就是楼上的,128*sizeof(STACK)这个表达式非常的危险,首先我不明白为什么要乘128,其次,这个表达式容易溢出,在这里,肯定溢出了。一般这个的表达式,会先将乘出来的结果放到左乘数中,在给等号左边的赋值,而常数一般用4个字节,sizeof(STACK)这个数比较大,乘出来结果溢出。

|
g_malloc()就是包装了malloc(),就是返回void *,
g_free(),忽略任何传给它的空指针

|
这里 addr不是声明为指针,而是一个结构变量,编译器知道这个结构的大小,所以也就自动给这个变量分配了空间。
但是指针就不一样了,编译器不可能知道你需要分配多大的空间,所以分配空间的事情,不可能由编译器自己完成,而需要写程序的人自己完成。

|
百度搜索:Linux core dump
或者去我的blog看看那个文章,gdb看一下core或者gdb走一下就知道了.

|
基础知识不过关,好好学习C和数据结构吧。。

|
内存错误多半由指针没有分配空间造成的

|
基础知识不过关
PSTACK pp是一个指针,没有分配内存的

|
跟你们高手学习中/。

|
很明显的错误嘛
栈结构指针还没分配内存

|
一看就是没分配空间。
还有函数有返回0,1时也用void来声明也是不好的。

    
 
 

您可能感兴趣的文章:

  • TOMCAT启动错误问题,请教!
  • 请教 stop: Unknown instance 错误是什么意思,怎么修复?
  • 请教:提示错误:cannot resove symbol
  • 请教:如何判别数据帧的CRC错误?对齐错?
  • 请教高手,如下编译错误是什么原因
  • 网络技术 iis7站长之家
  • 解析XML文件时出现如下错误,请教大家可能是什么原因???
  • 请教一个错误的原因。
  • 问题太难,请教高手,关于raid1功能的错误检测的实现
  • 请教java错误提示的含义
  • 【请教】一个VM安装的错误?
  • 高分请教个链接错误!!!
  • 请教:TCP CONNECT失败,返回错误Operation now in progress
  • [请教]msgsnd()返回ENOTTY错误,如何解决?
  • java.exe以及相关程序环境运行时报内存错误,请教各位什么原因?
  • 内核安装错误,请教!
  • 请教,关于kernel错误,急ing!!!!!!!!!!!
  • 【请教】段错误gdb调试的问题
  • 请教:关于tar! 为什么总是出这样的错误呢????
  • 请教关于在redhat linux 9下的rhide1.5.1和dev-c++运行错误:Segmentation fault
  • 最近学JSP,苦于HTML语言和JAVA语言太差,请教推荐几本书,thanks.
  • 请教UNIX下编程语言的选择问题
  • 请教C语言问题
  • freeBSD下语言的选型问题的请教
  • 初装RedHat9.0,关于语言安装的问题请教
  • 新手请教linux下的c语言编译!
  • 请教,在哪里能够查处Linux系统支持的语言编码。
  • 请教高手:C语言怎么知道一个进程是否存在(Linux下)
  • 请教:想用c语言编写能使浏览器启动的一个程序?
  • 请教:关于c语言结构的问题!
  • 请教如何用c语言在linux下实现检查某一用户密码长度?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3