免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4785 | 回复: 13
打印 上一主题 下一主题

程序排错,出现Segmentation fault,一般怎么做排查 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-30 18:07 |只看该作者 |倒序浏览
求教。程序很简单,新手救方法。
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         unsigned long int size;
  5.         char *endp;
  6.         char *path;
  7.         unsigned long int i = 0;

  8.         char *str = "ibdata1:10M;ibdata2:20M:autoextend\n";
  9.         printf("inti str : %s", str);

  10.         printf ("==================================\n");
  11.         while (*str != '\0') {
  12.                 path = str;
  13.                 while (( *str !=':' && *str !='\0') || (*str == ':' && ( *(str + 1) == '\\'|| *(str+1) =='/' || *(str+1) == ':'))){
  14.                         str++;
  15.                 }
  16.         if (*str == ':') {
  17.         *str='\0';
  18.         str++;
  19.         }
  20.         size = strtoul(str, &endp, 10);
  21.         str = endp;
  22.         if ((*str != 'M') && (*str != 'G')) {
  23.                 size = size / (1024 * 1024);
  24.         } else if (*str == 'G') {
  25.                   size = size * 1024;
  26.                   str++;
  27.         } else {
  28.                  str++;
  29.         }
  30.         i++;
  31.         printf("i %d,path %s \n",i, path);
  32.         printf("i %d,size %lu\n",i, size);
  33.         }
  34.         return 0;
  35. }
复制代码
环境在Linux,同时请教各位在Linux下开发的大牛们,一般遇到这种问题,从那些方面思考,谢谢。

论坛徽章:
0
2 [报告]
发表于 2010-07-30 18:09 |只看该作者
懒的看了.用GDB跟一下就出来了

论坛徽章:
0
3 [报告]
发表于 2010-07-30 18:09 |只看该作者
mem
anrry
point

论坛徽章:
0
4 [报告]
发表于 2010-07-30 18:13 |只看该作者
两位大师,这么快的速度。
GDB跟到:
*str='\0';

论坛徽章:
0
5 [报告]
发表于 2010-07-30 18:13 |只看该作者
mem
anrry
point
prolj 发表于 2010-07-30 18:09



    Prolj神人啊。我去Google一下你的关建词

论坛徽章:
0
6 [报告]
发表于 2010-07-30 18:23 |只看该作者
char *str = "ibdata1:10M;ibdata2:20M:autoextend\n";  静态字符串.不能改,而你却
*str='\0';

论坛徽章:
0
7 [报告]
发表于 2010-07-30 18:35 |只看该作者
char *str = "ibdata1:10M;ibdata2:20M:autoextend\n";  静态字符串.不能改,而你却
*str='\0';
zhangsuozhu 发表于 2010-07-30 18:23



    确实.犯这个错误的太多了.
虽然C书上一再提醒,但至少从我的角度来说,真正不会再犯这种错误还是弄清楚了程序文件在内存中分布后.

论坛徽章:
0
8 [报告]
发表于 2010-07-30 22:03 |只看该作者
gdb a.out core

论坛徽章:
0
9 [报告]
发表于 2010-07-31 03:58 |只看该作者
本帖最后由 langue 于 2010-07-31 03:59 编辑

一般比较短的代码扫一下就知道了,长的用调试器吧。

论坛徽章:
0
10 [报告]
发表于 2010-07-31 09:47 |只看该作者
看不出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP