Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1680324
  • 博文数量: 782
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 4140
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-06 21:37
个人简介

Linux ,c/c++, web,前端,php,js

文章分类

全部博文(782)

文章存档

2015年(8)

2014年(28)

2013年(110)

2012年(307)

2011年(329)

分类: LINUX

2011-05-12 18:01:36

是一些细节错误: 
指针没有赋值, 
变量赋值类型有错误。

错误类型并不难判断,不过地方是难找了些。 
你可以在你的代码里加入一些测试点,比如在某一行插入: 
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 

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

主要是看你的指针,在分配内存或释放内存时出现了问题 

建议:改用一个字符数组来进行存储。一般就不会出现问题

程序中对内存的操作有问题,查程序吧。Top相当于Windows的“咚!该程序执行的非法操作,即将关闭” 

肯定是因为访问了错误的内存地址。
阅读(6152) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~