分类: LINUX
2008-05-30 09:24:53
错误类型并不难判断,不过地方是难找了些。
你可以在你的代码里加入一些测试点,比如在某一行插入:
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
上面的说的很清楚了,改你的源程序吧