Linux段错误常见原因总结

做Linux开发,调试阶段经常可能遇到段错误,也就是日志中出现 Segment Fault,下面对造成段错误的几种原因做总结,方便有的放矢,快速查找定位问题。

段错误大部分都是内存使用出错造成的:

1 使用大的数据结构体作为函数的本地变量,在函数调用嵌套层次较多的情况下可能导致堆栈出错

2 内存数据拷贝,指针使用出错,比如不需要加取地址符号却添加了,需要添加时又没有添加

3 memcpy两个buffer的大小不一致

4 malloc分配释放不匹配

5 打印中包含指针的元素值,但是指针为空,这时打印就会造成段错误

6 改变指针指向内容的值,使用指针参数就可以,如果要改变指针指向的内容,也就是改变指针方向,就得使用指针的指针作为参数,如果使用错误,就会造成段错误

7 同上,如果参数为指针,传参时忘了取地址,或者反过来

8 本地变量有未初始化的情况。一般编译器会将全局或者静态变量初始化为0,而本地变量则必须手动初始化。如果不做初始化操作的话,变量初始值可能就是一个随机值。使用随机值做有关内存的操作,很容易导致段错误,而且这种情况导致的段错误不会每次运行都出现,这会加大问题定位的难度

9 驱动需要加载固件并初始化数据时,遇到过跑起来就段错误,原因是flash data下添加了新的数据,烧写时没有擦除,从而导入脏数据而产生段错误

猜你喜欢

转载自blog.csdn.net/wwwyue1985/article/details/112426451