卖萌的海豚 · 【转】C语言中 -> 是什么意思?_c语言 ->· 2 周前 · |
傲视众生的玉米 · C++ . -> :: ...· 2 周前 · |
睡不着的山楂 · C++ 中让人头晕的const & ...· 2 周前 · |
长情的充电器 · C++:delete不完整类型的指针 | ...· 2 周前 · |
没人理的红茶 · 手把手教你用Python写一个天天酷跑(附素 ...· 2 月前 · |
活泼的海龟 · 2024年中国伺服电机市场规模及竞争格局分析 ...· 2 月前 · |
粗眉毛的牛排 · 世事洞明_姜鹏_epub下载_txt下载_p ...· 4 月前 · |
淡定的跑步机 · Full Awards: High ...· 4 月前 · |
使用指针时最常见的错误就是没有语法错误的程序运行时直接崩溃,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下差不多)
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券
卖萌的海豚 · 【转】C语言中 -> 是什么意思?_c语言 -> 2 周前 |