码迷,mamicode.com
首页 > 其他好文 > 详细

Segment fault 常见原因

时间:2019-11-18 20:36:25      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:就会   截断   越界   空间   常见   使用   tail   ref   detail   

[https://blog.csdn.net/qq_22238021/article/details/79872978]

本质原因在于:程序访问了非法的地址

1.引用空指针
2.野指针
3.访问越界

造成的原因有多种:
主观原因:
1.新申请指针忘记赋NULL,也忘记分配空间,直接使用造成非法访问。
2.为指针赋值时,地址经过计算而来。计算过程有问题,导致赋值的地址不正确,
比如地址经过计算涉及到类型转换之类操作,很容易因为类型转换造成截断。

客观原因:
3.保存指针的空间被修改,比如你结构体中的一个成员是指针变量,它前面一个成员也是指针变量,
当前面的成员访问越界时,修改了后面成员的值,即前面操作踩了后面的空间,或者被其他程序踩到。
当再引用后面的指针时,就会发生段错误。或者free后面的指针时也会发生错误。

避免方法:
主观方面:
1.新申请指针赋NULL。
2.malloc和free一定要成对使用。
3.地址由计算得来时一定要小心处理,避免计算原因造成错误的地址。
客观方面:
4.怀疑发生段错误原因是指针地址被踩时,移动该成员到前面一点的位置,避免被踩,验证能否解决问题。

Segment fault 常见原因

标签:就会   截断   越界   空间   常见   使用   tail   ref   detail   

原文地址:https://www.cnblogs.com/How-Come/p/11884345.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!