c++ linux Segmentation fault报错记录

c++ linux Segmentation fault报错记录

什么是Segmentation fault?

segmentation,分割,分段,segmentation fault就是段错误的意思。所谓的段错误就是指访问的内存超过了所给这个程序的内存空间,通常这个值是由gdtr来保存的,它是一个48位寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下表,最后3位包括了程序是否在内存中以及程序的cpu中的运行级别,指向的gdt是由64位为一个单位的表,在这张表中就保存着程序运行的代码段、数据段的起始地址、相应的断限和页面交换还有程序运行级别和内存粒度等信息,一旦一个程序发生了越界访问,CPU就会产生相应的异常保护,于是segmentation fault就出现了。

即当程序试图访问不被允许访问的内存区域(比如,尝试写一块属于操作系统的内存),或以错误的类型访问内存区域(比如,尝试写一块只读内存)。这个描述是准确的。为了加深理解,我们再更详细的概括一下SIGSEGV。段错误应该就是访问了不可访问的内存,这个内存要么是不存在的,要么是受系统保护的

SIGSEGV:SIG是信号名称的一般前缀,SEGV是segmentation violation(分段违规),这是一个内存段错误。可以理解为发生segmentation fault的时候就会发出信号SIGSEGV

  • SIGSEGV是在访问内存时发生的错误,它属于内存管理的范畴
  • SIGSEGV是一个用户态的概念,是操作系统在用户态程序错误访问内存时所做的处理
  • 当用户态程序访问(访问表示读、写或执行)不允许访问的内存时,产生SIGSEGV
  • 当用户态程序以错误的方式访问允许访问的内存时,产生SIGSEGV

用户态程序地址空间,特指程序可以访问的地址空间范围。如果广义的说,一个进程的地址空间应该包括内核空间部分,只是它不能访问而已。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Segmentation fault(段错误)是一种常见的程序运行时错误,通常是由于访问了未分配的内存或者越界访问内存导致的。当程序试图访问不属于它的内存地址时,操作系统会发送SIGSEGV信号给程序,然后程序就会产生Segmentation fault报错。 对于这个报错,有几种可能的原因。一种可能是全局变量初始化太大,导致内存超出了程序能够分配的范围,解决方法是将全局变量改小。 另一种可能是访问了未分配的或非法的指针。这可能是由于指针未初始化、指针指向的内存已经被释放或者指针越界引起的。解决方法是确保指针的合法性,包括正确初始化指针、避免释放后继续使用指针以及确保指针不越界访问。 还有一种可能是数组越界访问,即访问数组的元素超出了数组的范围。解决方法是确保数组的索引不超过数组的长度。 此外,还可能是其他原因导致的Segmentation fault错误,根据具体情况进行排查和调试是解决问题的关键。可以使用调试工具如gdb来定位错误的位置,以便更好地解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vs code C语言代码关于Segmentation fault报错的原因](https://blog.csdn.net/2301_77019120/article/details/131235383)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [segmentation fault 段错误解决方法](https://blog.csdn.net/Peach2Orange/article/details/78978524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值