Chinaunix首页 | 论坛 | 博客
  • 博客访问: 213962
  • 博文数量: 27
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 310
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-15 22:38
文章分类
文章存档

2011年(1)

2008年(26)

我的朋友

分类: LINUX

2008-05-30 09:24:53

这几天一直在作多线程编程的工作, 修改了很多代码,今天遇到了segmentation fault 
这个错误。
嗨!
都是基础不牢固惹得祸啊!
看来下段时间要好好的复习C语言
转发一篇文章,讲明了解决方法
源文出处:http://hi.baidu.com/wangy0919/blog/item/150bc245afbdf23d87947324.html
是一些细节错误:
指针没有赋值,
变量赋值类型有错误。

错误类型并不难判断,不过地方是难找了些。
你可以在你的代码里加入一些测试点,比如在某一行插入:
printf("XXXXXX\n");
如果说在Segmetation Fault 前有你要打印的这些内容,那就是说错误在测试点后面。再继续查找。

segmantation fault :最主要的错误就是 声明了指针,但是没有初始化 ,结果再后来的时候进行间接引用 ,
就出现问题了。

比如
char *p ;
char test[] = "hello";
strcpy(p,test);

肯定会segmantation fault 了。

所以编程的时候,养成习惯:
比如
char *p = NULL;
FILE *ftp = NULL ;
还有:
char test_str[100];
memset(test_str,'\0',sizeof(test_str) ; 把字符串全部清空!

另外,利用malloc()函数分配内存空间的时候,也要检查,是否为空。 这都是c程序员需要自己完成的,
不能偷懒 ,否则 将来有什么发疯掉。

还有在程序多加一些assert()比较好,尤其是关键的地方,

比如一个指针 p 不能为空,可以这样断言: assert(p !=NULL) ,如果将来某一天程序出错了,p为空了,
那程序会马上中止,并打出了程序所在的行 ,便于查错!


内存越界或者非法地址访问!!!
看看你的数组、字符串、指针,malloc分配的内存区

如果是运行程序的话,那么可以调试
gdb -c core
然后输入where,就可以看到程序在哪里down掉的了


gdb *(your exe file) core(core file)

where :find the error
list:list the error

上面的说的很清楚了,改你的源程序吧

阅读(1723) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~