前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Error] Segmentation fault

[Error] Segmentation fault

作者头像
zhwhong
发布2018-05-16 16:53:38
1.8K0
发布2018-05-16 16:53:38
举报
文章被收录于专栏:技术随笔

        使用指针时最常见的错误就是没有语法错误的程序运行时直接崩溃,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_新浪博客

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015.01.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档