日期:2014-05-16  浏览次数:20703 次

segmentation fault----在Linux下真是一个蛋疼的错误,总结一下出现这错误的经历

    这真是一个蛋疼的错误!

    笔者经历过几次这个错误,一直也没有注意,知道后来经常遇到这个错误,觉得应该总结出来,引以为戒,同时也为各位同仁们,增加错误库,提高解决问题的速度。

    这个错误,查一下就知道是段错误,一般是指针出错,或者内容益处,反正就是一些不正常操作,系统无法执行下去了,就会产生这个错误。

    废话,这谁都知道,但是要根据具体问题,具体分析,说的那么虚,谁知道到底为什么?

    我遇到过几次这种错误,印象最深的就是两次:

   1.在select的时候:

     一般来说,在多线程的Linux中,select要被经常使用,如果你没有出错过,那你是幸运的,笔者有一次用select,查了很长时间(真的时间很长),才发现原来我监视的文件描述符没有初始化,是个负数!于是就段错误了。


  2.在memset的时候:

    让我们看下代码,就知道了,纠结了我一个上午,因为昨天测试的时候是好的,后来改动了一下,就出了问题

   	char  buf[128];
	if ((numlen > 20) || (len > 140))
	{
		return FALSE;
	}

	memset(buf,0,256);
也许你看出来了,我定义了一个128个字节大小的数组,却把256个字节的东西都清零了,我根本不知道后面的128的数据是什么,就这样被我清零了。。。


    编程要心细,如果有一个可以完美运行的版本一定要存下来,否则当你出错的时候,真的会急死人的,好了,去吃饭了~~~