[Error] Segmentation fault

        使用指针时最常见的错误就是没有语法错误的程序运行时直接崩溃,Debug时运行到有问题的一行是,程序崩溃,并在右下角冒出提示SIGSEGV Segmentation fault.(cb环境下),图如下:

figure 1

        在linux下面也经常会遇到segmentation fault,这时会返回一个信号量SIGSEGV,造成这个错误的原因主要包括:

1.  SIGSEGV是访问内存时发生错误,它属于内存管理的范畴

2.  SIGSEGV是一个用户态的概念,是操作系统在用户态程序错误访问内存时所做出的处理

3.  当用户态程序访问(访问表示读、写或执行)不允许访问的内存时,产生SIGSEGV

4.  当用户态程序以错误的方式访问允许访问的内存时,产生SIGSEGV

下面贴一段代码:

example 1

        上述代码想要实现一个给定字符串的反转,但在编译的时候在35行会报错segmentation fault,究其原因是对企图向指针str所指内存中写入。

        指针str所指的是常量字符串在生成可执行文件后会与代码段放在一起,该区域是只读的,所以企图修改指针所指内容会出错。

简单的说,

1.间访了一段不属于操作系统给你的空间。

2.程序以错误的方式访问允许访问的内存时,产生SIGSEGV

举几个例子:

1.利用指针对数组间访时越界了,即间访到该数组后面的空间了(即间访了一段不属于操作系统给你的空间。)

2.间访悬挂或空指针写入东西,应先用内存分配为指针分配一段空间或将其指向某个东西。

3.

example 2

        程序企图向指针ps所指内存中写入,但指针ps所指的是常量字符串,在生成可执行文件后它会与代码段放在一起,该区域是只读的,所以企图修改指针所指内容会出错。

目前我能遇到的就是这么几种。

有更详细的可以去下面给出的网站看看:(说是linux的,但windows下差不多)

1.    Segmentation Fault in Linux 原因与避免 - 邓维 - 博客园

2.    segmentation fault_四月一日xxxHolic_新浪博客

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

C#异步调用的方法

最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下...

38360
来自专栏技术点滴

命令模式(Command)

命令模式(Command) 命令模式(Command)[Action/Transaction] 意图:将一个请求封装为一个对象,从而可用不同的请求对客户参数化。...

19450
来自专栏Kevin-ZhangCG

[ Java面试题 ]WEB篇

22080
来自专栏测试驿栈

JMeter(十)-正则表达式关联

jmeter中,接口自动化的关键在于参数关联。比如需要登录的接口,如何调用登录口令?一个增删改查的闭环,如何将接口参数上下传递?下面就以实际的例子来仔细说一说

15420
来自专栏java思维导图

通俗易懂讲解Java线程安全

一个非科班的技术男,自学半年找到了份不错的程序员工作,运营维护订阅号「一个程序员的成长」希望做一个专注于Java领域的公众号,喜欢本文章可以搜索关注。

12730
来自专栏开发与安全

《鸟哥的linux私房菜》基本命令笔记

1.以前没注意过的,略写的命令option后面只能空格后加参数,而标准option即可以空格也可以等号后跟着参数,如date命令,date -r filenam...

24960
来自专栏Web项目聚集地

通俗易懂讲解Java线程安全

一个非科班的技术男,自学半年找到了份不错的程序员工作,运营维护订阅号「一个程序员的成长」希望做一个专注于Java领域的公众号,喜欢本文章可以搜索关注。

17720
来自专栏Scott_Mr 个人专栏

初识 Runtime

345100
来自专栏对角另一面

lodash源码分析之List缓存

昨日我沿着河岸/漫步到/芦苇弯腰喝水的地方 顺便请烟囱/在天空为我写一封长长的信 潦是潦草了些/而我的心意/则明亮亦如你窗前的烛光/稍有暧昧之处/势所难免...

28060
来自专栏javathings

volatile 解决了什么问题?

volatile 关键字是最常问到的问题,关于这个关键字的作用解释,网上的文章已经多如牛毛了。

33930

扫码关注云+社区

领取腾讯云代金券