我们在linux上写代码,并运行程序时,经常会碰到程序执行到一半发生“segment fault”的错误,一头雾水,而且对这类问题的排查也是相当麻烦的一件事。而且我在面试的过程中也被面试官问到过这个问题,所以了解发生这个问题的原因对于在linux开发的技术人员来说是很有必要的。

引起这个错误的典型情况是对非法指针解引用。当指针指向一个不允许读或写的内存地址,而程序却试图利用指针来读或写该地址的时候,就会出现在该错误。

在Linux或Windows的内存布局中,有些地址是始终不能读写的,例如0地址。还有地址是一开始不允许读写,应用程序必须实现请求获取这些地址的读写权,或者某些地址一开始并没有映射到实际的物理内存,应用程序必须实现请求将这些地址映射到实际的物理地址,之后才能够自由地读写这片内存。当一个指针指向这些区域的时候,对它指向的内存进行读写就会引发错误。

造成这种错误最普遍的原因有两种:

(1)程序员将指针初始化为NULL,之后却没有给它一个合理的值就开始使用指针;

(2)程序员没有初始化栈上的指针,指针的值一般会使随机数,之后就直接开始使用指针。

因此,如果你的程序出现了这样的错误,请着重检查指针的使用情况。

在linxu中经常发生段错误(segment fault)的原因相关推荐

  1. Linux下发生段错误时如何产生core文件-转

    Linux下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进 ...

  2. 牛客网“程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)”错误的可能原因

    晚上在牛客网练习编程,做了一题网易的,很简单的题但是会提示"程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)",想来想去也不懂为什么,本地可以测试通过,然后既没有 ...

  3. 段错误(Segmentation fault)

    段错误 背景 Debug 背景 在使用MPI并行化矩阵乘向量的实验中,发现如果矩阵的规模规模较大时,就会导致段错误. 将错误代码进行简化,如下所示 /* File name: seg_error.c ...

  4. Ubuntu--(8)段错误Segmentation fault (core dumped)

    段错误 指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况,例如: 访问不存在的内存地址 #include<st ...

  5. C 总线错误 (bus error) - 段错误 (segmentation fault)

    C 总线错误 (bus error) - 段错误 (segmentation fault) 两个常见的运行时错误: bus error (core dumped) - 总线错误 (信息已转储) seg ...

  6. 总结段错误(Segmentation fault)

    总结段错误(Segmentation fault) 1)往受到系统保护的内存地址写数据 有些内存是内核占用的或者是其他程序正在使用,为了保证系统正常工作,所以会受到系统的保护,而不能任意访问. 1 # ...

  7. linux read函数段错误,linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数...

    进来在linux下开发C++项目,遇到了非常奇怪的bug. 项目须要多线程实现,在写好代码后,每当执行到线程函数内部,当内部调用其他函数如printf.fopen等时就会提示段错误(segmentat ...

  8. QT安装段错误segmentation fault

    QT安装段错误segmentation fault 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录 QT安装段错误segme ...

  9. c语言fscanf 发生段错误,亚嵌教育

    亚嵌教育 46期C语言复习串讲课堂笔记 (2012-2-20) 知识点汇总 (以下知识点内容基本按照<一站式编程>章节顺序) 程序概念 指令 (代码段) 函数调用 printf() 运算( ...

最新文章

  1. Android通过ksoap2调用.net(c#)的webservice
  2. Django web框架学习笔记
  3. 招募 | 大马鹿物流运筹优化算法工程师
  4. Sql面试题之三(难度:简单| 含答案)
  5. 解决 Mysql下使用EF Code First 指定表Engine无效的思路
  6. spring源码分析之context:component-scan/vsannotation-config/
  7. springboot根据环境装配配置文件、启动加载外置配置文件
  8. android ndk程序UnsatisfiedLinkError解决方案
  9. QT绘制嵌套的圆饼状图
  10. 前端学习(582):实现观看和调试dom节点
  11. Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】
  12. CVPR 2021 接收论文临时列表!27%接受率!
  13. Python保留字,keyword
  14. 网管,真的是我该选择的路吗?
  15. 双循环背景下的全球供应链机遇与挑战
  16. k8s免fq下载镜像
  17. MATLAB强化学习实战(一) 强化学习智能体训练总览
  18. word自动消除html标签,如何将Word转换为网页html格式的方法(附代码清理方法)
  19. 角点检测 c语言 棋盘格,一种棋盘格角点全自动检测方法与流程
  20. Spring当中循环依赖很少有人讲,今天让我们来看看吧

热门文章

  1. 模拟器和服务器共享文件,多玩手游模拟器和电脑上的文件共享设置教程
  2. yoloV3测试map和画PR曲线
  3. 甜蜜好礼丨这个七夕不再孤寡孤寡孤寡~
  4. 达人评测小米平板5怎么样
  5. 编写C语言函数求字符串长度,用C语言编写函数,实现strlen计算字符串长度的功能...
  6. solidworks2019无法获得下列许可solidworks standard无效的(不一致的)使用许可号码(-8,544,0)
  7. linux僵死进程的产生与避免
  8. 服务器挂载云盘是做什么用,单独创建的云盘怎么挂载到ECS实例上
  9. php中mysql_query是什么意思_php中mysql_query是什么意思?
  10. opencv 视频中的人脸打码