Segment fault 常见缘由

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

本质缘由在于:程序访问了非法的地址

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

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

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

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

相关文章
相关标签/搜索