C++ 段错误 Segmentation fault 调试

问题背景

写过 C++ 的朋友都知道,程序编译通过,并不能代表程序就是对的。在 linux 下做开发时,经常会遇到跑崩溃的情况,但是在终端只会报 Segmentation fault。如果工程代码量少,还能重新 debug一下慢慢找,对于大型工程,想短时间内找到是非常困难的。

什么是段错误(Segmentation fault)

首先我们先来搞清楚什么会导致段错误(Segmentation fault)。段错误是指硬件设备MMU(内存管理单元)发现访问了一个非法的虚拟地址,通知操作系统内核给进程发送11号信号(SIGSEGV信号),导致进程异常终止。

一般来说,段错误是由以下几个原因导致的:

  1. 访问不可访问的内存空间(如内核空间)
  2. 访问不存在的内存地址
  3. 试图写一个只读内存空间(如代码段)
  4. 栈溢出(函数递归调用太深)
  5. 使用未初始化的指针(定义时没有初始化或者已经回收)

排查段错误错误的方法包括:

  1. 检查指针:确保指针在使用之前被正确初始化,并且没有超出其所指向的内存范围。特别是当使用动态内存分配函数(如new、malloc等)时,需要确认分配的内存是否有效,使用后需要释放内存,避免悬挂指针。
  2. 数组越界:确保数组访问不越界。数组越界会导致访问无效内存区域,引发"Segmentation fault"错误。注意在使用数组时,
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值