2019独角兽企业重金招聘Python工程师标准>>>

一 造成segment fault,产生core dump的可能原因

容器使用越界问题

for(iter=q.begin();iter!=q.end();iter++)
   q.erase(iter);

deque<int> q;
for(i=0;i<15;i++)q.push_back(i);//先输出
deque<int>::iterator iter=q.begin();
for(iter=q.begin();iter!=q.end();iter++)cout<<*iter<<" ";
cout<<"*q.end()为"<<*q.end()<<endl;//从这里可以看出*q.end()并不是14    //这里erase()
for(iter=q.begin();iter!=q.end();iter++)q.erase(iter);这样在erase最后一个之后会出问题,会溢出,虽然可以for(iter=q.begin();(iter+1)!=q.end();iter++)可以不溢出,但是不能erase最后一个元素。  //网上说因为erase后,iterator会移到它的下一个元素上,此时你在对它++,
//相当于一次移动了2个位置,这样可能会越界,就会出错,这样比较安会,但是还是没有解决问题
for(iter=q.begin();iter!=q.end();)q.erase(iter++);

容器:vector、set、map常用操作,segment fault问题

1.内存访问越界

a) 由于使用错误的下标,导致数组访问越界

b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符

c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。

2 多线程程序使用了线程不安全的函数。

3 多线程读写的数据未加锁保护。对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则很容易造成core dump

4 非法指针

a) 使用空指针

b) 随意使用指针转换。一个指向一段内存的指针,除非确定这段内存原先就分配为某种结构或类型,或者这种结构或类型的数组,否则不要将它转换为这种结构或类型的指针,而应该将这段内存拷贝到一个这种结构或类型中,再访问这个结构或类型。这是因为如果这段内存的开始地址不是按照这种结构或类型对齐的,那么访问它时就很容易因为bus error而core dump.

5 堆栈溢出.不要使用大的局部变量(因为局部变量都分配在栈上),这样容易造成堆栈溢出,破坏系统的栈和堆结构,导致出现莫名其妙的错误。

转载于:https://my.oschina.net/u/347414/blog/173217

segment fault相关推荐

  1. Linux下如何生成core dump 文件(解决segment fault段错误的问题)

    Linux下如何生成core dump 文件(解决segment fault段错误的问题) 参考文章: (1)Linux下如何生成core dump 文件(解决segment fault段错误的问题) ...

  2. Segment fault之痛

    自从学习在linux下开发以来,segment fault便是家常便饭了.对付此类问题,通常办法: 1.调试或看coredump文件,查看调用堆栈找出错点,通常能准确定位: 2.有些隐藏问题直接看调用 ...

  3. Segment fault及LINUX core dump详解

    C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界. (2)修改了只读内存. (3)scanf("%d&q ...

  4. GDB调试core文件样例(如何定位Segment fault)

    core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (Linux中如果内存越界会收到SIG ...

  5. arm-linux-ld segment fault,segment fault 定位 与 远程 gdb

    远程 GDB 首先 ,Target 为 ARM开发板 (IP =  192.168.1.200),HOST 为 Ubuntu 14.04 虚拟机 (IP = 192.168.1.4) 1. 下载  g ...

  6. memcpy越界引起的segment fault

    memcpy(dst, src, size); 如果size过大,dst或者src指向的内存空间申请过小的话,就会导致memcpy越界访问,导致segment fault.

  7. 在linxu中经常发生段错误(segment fault)的原因

    我们在linux上写代码,并运行程序时,经常会碰到程序执行到一半发生"segment fault"的错误,一头雾水,而且对这类问题的排查也是相当麻烦的一件事.而且我在面试的过程中也 ...

  8. linux学习记录-coredump segment fault

    linux学习记录: 1.coredump:段错误; 总线错误; 程式记忆体区段错误; 链接:http://www.cnblogs.com/doctorqbw/archive/2011/12/21/2 ...

  9. 【转】造成segment fault,产生core dump的可能原因

    2019独角兽企业重金招聘Python工程师标准>>> 1.内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字 ...

最新文章

  1. 关于学习Python的一点学习总结(45->反运算)
  2. 【数理逻辑】谓词逻辑 ( 谓词逻辑基本等值式 | 消除量词等值式 | 量词否定等值式 | 量词辖域收缩扩张等值式 | 量词分配等值式 )
  3. linux中sleep再循环里,Linux sleep 语句以及循环 测试负载
  4. android 数组赋值字符串_c语言中的字符数组与字符串
  5. Test_data detection-Illumination
  6. 获取对话框当前cfont_自绘对话框
  7. android 上线apk,码云 Android apk 在线构建功能上线啦!
  8. 动态规划走楼梯_负重爬楼梯、过草地,服贸会六足机械人展示“送水到家”
  9. jmeter环境配置
  10. Spring MVC 的常用注解
  11. 【数据库】数据库系统的结构(概念篇详解)
  12. snprintf函数用法
  13. 数据库索引 类型 (转载)
  14. 斗牛/牛牛经典算法java版
  15. 板邓:php+mayql分页原理及案例
  16. python重命名异常_Python:如何忽略异常并继续?
  17. 墨瞳漫画 升级vue2 踩坑
  18. AMD首批Zen4架构CPU,连低端R5单核性能都超英特尔旗舰,最高降价700元
  19. breakpoint()
  20. Python3.6笔记之腌制泡菜(pickle模块的用法)

热门文章

  1. python awk 读文件_测试python awk sed 读取文件指定位置时的性能
  2. VINS-Mono关键知识点总结——预积分和后端优化IMU部分
  3. 【AI不惑境】模型量化技术原理及其发展现状和展望
  4. 2022年全球及中国脂肪酸氯化物行业专项可行性与供需前景调研报告
  5. 全球及中国水刀机械行业发展态势及及投资决策建议报告2021年版
  6. 中国半挂车行业投资前景预测与十四五投资战略规划分析报告2021年版
  7. 中国机器人减速机行业十四五发展规划及未来需求预测报告2021-2027年
  8. 全球及中国真空管太阳能集热器行业竞争状况及投资策略研究报告2021年版
  9. 京东对话中国农民丰收节交易会 供应链下沉打通产销全链
  10. 性能测试四十八:Jenkins+Ant+Jmeter系统部署