打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Segmentation fault 问题浅谈
    今天调试程序时遇到了一个问题,当我用GDB调试程序时出现了Segmentation fault,以前没有遇到过,最后查看资料,有点明白了。
    出现了Segmentation fault,基本上的原因是,非法的内存访问。
例如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间,还有就是申明一个指针,但却没有对其初始化,就直接引用,或者没有开辟内存空间就释放内存,所以要检查申请空间时间偶成功。。。

还有那个问题在调试时会有这样的信息:
Program terminated with signal SIGSEGV, Segmentation fault.
对于SIGSEGV这个信号,经常会和SIGBUS信号出现在一块,
SIGBUS与SIGSEGV信号的一般区别如下:

1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。
通常是未对齐的数据访问所致。
2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。

通常导致段错误的几个直接原因:
1、解除引用一个包含非法值的指针。
2、解除引用一个空指针(常常由于从系统程序中返回空指针,并未经检查就使用)。
3、在未得到正确的权限时进行访问。
4、用完了堆栈或堆空间(虚拟内存虽然巨大,但绝非无限)。

这些是我个人的一些看法,希望和大家交流。。。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
段错误信号
QT程序出现Bus Error问题的调试
【原创】(十四)Linux内存管理之page fault处理
虚拟内存 和 page fault 的解释
内存未对齐(Unaligned access mips sh4linux QtWebkit)导致性能降低及其处理
Segmentation fault
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服