linux segmentation fault 信号,linux中 Segmentation fault问题

linux中 Segmentation fault问题

王钰琪 2016年4月27日 No Comment

今天写Gtest的时候程序报了 Segmentation fault,这也是linux C/C++比较常见的一个问题,即段错误。

出现这种错误的原因就是访问了不该访问的内存地址,一般情况就是:

(1)数组越界

(2)指针访问了一块非法地址(指针未初始化或者初始化错误)

(3)释放一块并没有申请的空间

而调试程序的时候吗,这种情况一般会给提示信息(Linux的哲学是不显示信息就OK,显示东西了一般都不是好事情):

Program terminated with signal SIGSEGV, Segmentation fault.

这里要注意提示信息中的SIGSEGV,这是内核返回的一个信号,还有另外一个信号是SIGBUS,这两个信号都与段错误有关

SIGBUS表示指针指示的地址是有效地址,但是总线不能使用此地址,这一般和数据未对其有关。

SIGSEGV表示指针指示的地址是无效地址,没有有效内存对应该地址。

出现段错误的情况一般;

(1)解引用一个包含非法值的指针。

(2)解引用一个空指针(所以使用指针前需要判空的)

(3)指针越界访问(一般是index值超过了申请空间的大小)

(4)用完了堆栈或堆空间(虚拟内存虽然巨大,但绝非无限)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值