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

这个程序崩溃的原因?

    来源: 互联网  发布时间:2016-04-01

    本文导语:    1 #include             2 #include             3 #include             4 typedef    struct  TAG_datastruct   5 {   6         char*         string;   7         int           checksum;   8 }datastruct;  ...

  1 #include          
  2 #include          
  3 #include          
  4 typedef    struct  TAG_datastruct
  5 {
  6         char*         string;
  7         int           checksum;
  8 }datastruct;
  9
 10
 11 datastruct*       getinput( void );
 12 void              printmessage(datastruct*   todisp);
 13 int  main()
 14 {
 15         int             counter ;
 16         int             maxval = 0;
 17         datastruct*     svalues[200];
 18         for ( counter =0 ; counter string =  strdup(input);  /*char *strdup(const char *s);*/
 41         instruct->checksum = 0;
 42         for ( counter = 0 ; counter string); counter++ )
 43         {
 44                 instruct->checksum += instruct->string[counter];
 45         }
 46         return instruct ;
 47 }
 48
 49 void printmessage(datastruct*   todisp )
 50 {                                                             
 51         printf(" This structure has a checksum of %d . Its string is : n ", todisp->checksum);
 52         puts(todisp->string);
 53 }
 54

当我直接输入:Enter的时候就有如下下的错误
段错误 (core dumped)
用gdb调试的结果是:
Core was generated by `./test4_4'.
Program terminated with signal 11, Segmentation fault.
#0  0x080485bf in printmessage (todisp=0x0) at test4_4.c:51
51              printf(" This structure has a checksum of %d . Its string is : n ", todisp->checksum);
其栈中的内容是:
(gdb) bt
#0  0x080485bf in printmessage (todisp=0x0) at test4_4.c:51
#1  0x080484d4 in main () at test4_4.c:25
(gdb) frame 1
#1  0x080484d4 in main () at test4_4.c:25
25              printmessage( svalues[maxval/2] );
意思就是在maxval有错误了,但是错误的原因是什么,我想有个具体的解答!

|
刚才弄错了,36行到38行没问题。
如果第一次输入的时候就直接输入Enter,getinput返回NULL,执行到25行的时候maxval是0,svalues[0]是NULL,所以52行的todisp也是NULL,于是崩溃了。

|
顺便说一句,对于这种有指针作为参数的函数,要特别小心,应该在使用这个指针之前,判断是否NULL。
 49 void printmessage(datastruct*   todisp )
 50 {                                                             
 51         printf(" This structure has a checksum of %d . Its string is : n ", todisp->checksum);
 52         puts(todisp->string); // 事先判断todisp是否NULL
 53 }

|
gdb已经告诉你了:

#0  0x080485bf in printmessage (todisp=0x0) at test4_4.c:51 

todisp是个空指针!

    
 
 

您可能感兴趣的文章:

  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • wine中安装windows程序,程序崩溃的问题
  • 程序崩溃,生成core 文件后 GDB挂载没用。。。
  • 应用程序gnome-settings-daemon崩溃是什么错误?
  • 我VM的linux启动时提示:应用程序似乎即将崩溃..
  • 请问有没有办法让程序在崩溃的时候自启动
  • 最近程序老是在malloc或者free内存的时候崩溃或者失去响应,请教高手。
  • 一个崩溃程序,什么时候有core,什么时候没core
  • redhat9 应用程序gnome进程已经崩溃
  • 怎么能让我的程序在崩溃时生成dump文件
  • 远程登录到UNIX服务器,执行一个死循环程序对导致服务器崩溃吗?
  • 我以一个Linux的user登录进去,从任务拦用鼠标右键新建一个Launcher时总是出现程序崩溃的错误,而从桌面新建Launcher就没问题,别的user
  • 求助:linux程序崩溃了,但不知道问题在哪里,有什么好的解决方法么?
  • 注释掉未使用变量,导致程序运行崩溃问题.
  • linux多线程中使用system函数后时而程序崩溃,求助!!!
  • [搞了一个星期了,真的快崩溃了~!!]静态编译opencv程序(还是人脸检测程序)
  • Linux下多线程程序崩溃时如何提取出所有线程的函数调用栈
  • 程序崩溃:提示Out of Memory: Killed process 401 (ttycmd_b).
  • 如果释放动态内存多于当初分配的数目,积少成多会造成程序崩溃吗?
  • VC6.0打开文件以及向工程中添加文件时程序崩溃自动退出解决方法
  • Android 如何收集已发布程序的崩溃信息
  • Linux下怎样查c程序的错误号?程序出现错误:System error 32: Broken Pipe, 是什么原因?
  • 程序提示Terminated是何原因?
  • 第一次起qt的程序,很慢,谁知道是什么原因么?
  • 请问libnids 程序能运行的原因
  • java.exe以及相关程序环境运行时报内存错误,请教各位什么原因?
  • solaris 8, 执行程序告诉我cannot execute binary file,什么原因?
  • 程序收到SIGPIPE信號異常結束,是什麽原因?
  • 急问socket编程:程序中执行sendto()返回errno=101是什么原因啊
  • **********写了一个简单的UDP程序,接受英文的消息正常,接受中文的消息显示不完整,请问是什么原因
  • 一个程序两个结果,请高手分析原因
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 程序员的八种级别,你属于哪一级?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • 在docker容器中通过apt-get安装新的程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • linux下通过crond实现自动执行程序
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • http协议介绍,文件上传分析及程序举例
  • 在java控制台程序中,可以用System.exit(0);使用一个程序终止,那么在servlet中如何使一个servlet程序终止呢?
  • 程序员赚钱致富的6种方法
  • 程序调用脚本,脚本启动另一个程序,如何让原始程序彻底释放资源?
  • HASH查找的程序实现及性能分析
  • python计算程序开始到程序结束的运行时间和程序运行的CPU时间
  • 程序员为了健康必看!早晨空腹喝水,是对还是错?
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收


  • 站内导航:


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

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

    浙ICP备11055608号-3