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

求助,SIGSEGV 错误怎么修改?

    来源: 互联网  发布时间:2016-12-11

    本文导语:  我用dbg运行一个程序的时候出现错误,内容为 Program received signal SIGSEGV, Segmentation fault. 0x08048e20 in split (),以上给出的是split()函数,有谁帮我看一下,再帮我纠正这个错误,谢谢了! /*宏,将cline串中从pos所...

我用dbg运行一个程序的时候出现错误,内容为 Program received signal SIGSEGV, Segmentation fault.
0x08048e20 in split (),以上给出的是split()函数,有谁帮我看一下,再帮我纠正这个错误,谢谢了!



/*宏,将cline串中从pos所表示的位置开始,跳过连续的空格和制表*/
#define del_blank(pos,cline);{
while(cline[pos]!=''&&(cline[pos]==' '||cline[pos]=='t')){
pos++;
}
}

/*宏,得到一个命令参数,将cline串中从pos所表示的位置的内容复制到arg缓冲区中,直到遇到空格、制表符或者结束符为止*/
#define get_arg(arg,pos,cline);{
int i=0;
while(cline[pos]!=''&&cline[pos]==' '&&cline[pos]=='t'){
arg[i++]=cline[pos++];
}
}

/*将一个命令分割成命令参数并存储在command_struct中,成功则返回拆分后命令参数的个数,失败返回-1*/
/*command:存储命令名和命令参数的结构体 cline命令字符串*/
int split(struct command_struct *command,char cline[]){
printf("进入split函数!!");
int i;
int pos=0;
cline[strlen(cline)-1]=''; /*得到命令字符串的长度,将最后一个‘n’替换成‘’*/
printf("strlen(cline) is:%d",strlen(cline));
del_blank(pos,cline); /*过滤空格符直到遇到第一个参数*/
i=0;
while(cline[pos]!=''){ /*处理命令字符串*/
/*为存储命令参数的数组分配空间*/
if((command->argv[i]=(char*)malloc(MAX_LENGTH))==NULL){
perror("fail to malloc1");
return -1;
}
/*得到一个参数,将两个空格之间的内容复制到存储参数的数组*/
get_arg(command->argv[i],pos,cline);
i++; /*下一个参数*/
del_blank(pos,cline); /*过虑掉空格*/
}
command->argv[i]=NULL; /*命令参数数组以NULL结尾*/
command->name=command->argv[0]; /*命令名和第一个命令参数实际上指向同一块内存区域*/
return i;
}



|
cline[strlen(cline)-1]=''; /*得到命令字符串的长度,将最后一个‘n’替换成‘’*/

字符串是以 结尾的, strlen() - 1  刚好就是 , 而不是你所谓的 n

|


举个例子:
split(struct command_struct *command,char cline[])
如果你command 传入函数时就为NULL,command->argv[0]=NULL   就会出错。
如果你的command不为NULL,但是你的argv[]最大为5 ,而你搞了个command->argv[6]=NULL也会出错。

|


list  查看源代码
break 打断点
具体的自己查资料吧,基本上是肉眼可以看出来的错误

程序要自己调,饭才能自己吃 :)

|
SIGSEGV, Segmentation fault
无效内存使用,出现段错误。
也就是说你程序中对某段无效的地址
空间进行了使用。一般情况是:数组
越界了;或者指针变量,没有指向某
对申请过的地址。

------------------------------

更多技术文章敬请关注:武汉华嵌-嵌入式培训专家,国内领先的嵌入式服务机构,

http://www.embedhq.org

|
如果问题必现,你可以在split里面单步跟踪啊

backtrace 可以查看调用栈的情况,简写bt

|
段错误,
你访问了不改访问的内存,或者修改了不该修改的内存。

|
在函数被调用那里设置一个断点,然后step进入函数里面。

    
 
 

您可能感兴趣的文章:

  • ~(取反)操作错误,求助!谢谢
  • 新手求助!编译libmad包时的错误!
  • 求助前辈们:solaris 10 x86 安装oracle 10g 错误
  • 新人求助 关于strcat的错误
  • 求助:第一次装apache+php,运行站点出现403错误!
  • Linux启动错误求助!
  • Linux安装错误求助!
  • 求助 !!ALSA声卡驱动错误!
  • 求助!请问VMware Workstation unrecoverable error,这个错误如何解决。
  • 求助一个编译中的/usr/bin/ld错误
  • 大侠,求助!!LINUX下TCP套接字编程中客户端出现段错误
  • 求助 程序链接错误
  • 菜鸟求助linux最最基本的HELLO函数错误
  • 求助:"错误:com/borland/jbcl/layout/XYLayout"应如何解决?
  • [紧急求助]socket在read时提示Connection reset by peer错误
  • **紧急求助:使用xmanager连接linux出现得错误*****
  • 求助,关于linux启动的错误(runlevel:9)
  • 【求助】急:Fedora 9 SELinux 配置错误导致启动不了怎么办?
  • gtk+ 和glade错误求助
  • make错误,求助。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助,linux中修改了目录dir下的某个文件,相应的dir属性中的时间会与修改目录下文件的时间一致,这是怎么实现的?
  • [求助]修改文件内容
  • 求助:如何修改QSlider的“滑块”大小?
  • 新手求助:修改profile文件后,重启登录不了了?
  • 求助文件操作中修改文件中字段的问题,请大家帮忙解决
  • 求助 linux 修改用户密码问题
  • 求助:想做个chmod功能的程序,修改文件的权限
  • 紧急求助:如何动态修改某个选中jTree节点的节点名称。
  • 分区修改问题求助
  • 求助!急(关于硬盘序列号的修改)
  • 求助一个修改文件名的问题
  • 求助~~请教怎么把这段代码修改成在windows xp 里能运行的说
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题
  • 求助:信号 --13 进程中断
  • 求助,安装了红帽子后进不了
  • 新装linux求助
  • linux的 iptables问题求助
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 一个简单的问题,高分求助!!!
  • 紧急求助:Unix下给文件夹重命名用什么命令?谢谢!!!!
  • VJ的一个问题,高分求助,熟悉VJ得请进!


  • 站内导航:


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

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

    浙ICP备11055608号-3