【Segment Fault】段错误解析
来源:互联网 发布:mac版微信可以视频吗 编辑:程序博客网 时间:2024/05/15 07:49
今天发现了几个容易导致段错误的代码;自己分析了一下,分享给大家!
段错误是什么?段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。
访问不存在的内存地址
#include<stdio.h>
#include<stdlib.h>
void main()
{
int*ptr = NULL;
*ptr = 0;
}
因为操作系统不会把任何数据保存在地址0及其附近,也不会把地址0~0xfff的页面映射到物理内存,所以任何对地址0的访问都会立刻导致段错误。*p = 0;
会导致段错误
访问只读的内存地址
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
char*ptr = "test";
strcpy(ptr, "TEST");
}
其实,char *ptr ="test"和constchar *ptr ="test" 是一样的,都是存在敞亮区,处于静态储存区,是只读的,不可修改的,”test”是固定存在.rdata段的。如果对只读的进行写操作,那么系统就会提示”segmentationfault”
栈溢出
栈溢出就是:栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围。(来自百度百科)
#include<stdio.h>
#include<stdlib.h>
void main()
{
main();
}
所以尽量在编代码中避免这些常犯的错误!
- 【Segment Fault】段错误解析
- 用gdb检查段错误(segment fault)
- 用gdb检查段错误(segment fault)
- 用gdb检查段错误(segment fault)
- 用gdb检查段错误(segment fault)
- segment fault 段错误各种原因
- c++中的段错误(segment fault)
- Linux 段错误调试Segment Fault
- 捕获Linux段错误(Segment fault)并且打印错误堆栈
- 段错误(Segment Fault!)莫名的问题 by fish
- 段错误(Segment Fault!)莫名的问题
- 段错误(segment fault)的几种原因
- 利用linux信号机制调试段错误(Segment fault)
- segment fault 段错误 (core dumped)的起因分析!
- 第一时间捕获段错误(segment fault)的详细信息
- 使用gdb调试段错误(segment fault)
- 使用gdb调试段错误(segment fault)
- c/c++/qt中的段错误(segment fault)
- Zen cart新进商品随机显示改为固定
- 在商品详细页,随机显示一定数量的同类产品
- 淘宝卖家要哭了!腾讯统一PC端QQ在线图标
- android平台解析epub格式的书籍信息
- WPF InkCanvas画布
- 【Segment Fault】段错误解析
- 数据挖掘之频繁项集分析
- 果粉死忠多 安卓用户忠诚度远不及iOS
- Ext.get('empName').dom.value;取出来的值为空
- 使用QLocale加载多语言
- 傻瓜教学--vmware安装虚拟机系统和多开游戏和共享真机文件
- 熊猫烧香病毒作者再被捕 开网络赌场敛财
- 安装RAC时ASM 存储器配置的选型
- IOS简单的字串替换方法stringByTrimmingCharactersInSet