segment fault
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相关推荐
- Linux下如何生成core dump 文件(解决segment fault段错误的问题)
Linux下如何生成core dump 文件(解决segment fault段错误的问题) 参考文章: (1)Linux下如何生成core dump 文件(解决segment fault段错误的问题) ...
- Segment fault之痛
自从学习在linux下开发以来,segment fault便是家常便饭了.对付此类问题,通常办法: 1.调试或看coredump文件,查看调用堆栈找出错点,通常能准确定位: 2.有些隐藏问题直接看调用 ...
- Segment fault及LINUX core dump详解
C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界. (2)修改了只读内存. (3)scanf("%d&q ...
- GDB调试core文件样例(如何定位Segment fault)
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (Linux中如果内存越界会收到SIG ...
- 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 ...
- memcpy越界引起的segment fault
memcpy(dst, src, size); 如果size过大,dst或者src指向的内存空间申请过小的话,就会导致memcpy越界访问,导致segment fault.
- 在linxu中经常发生段错误(segment fault)的原因
我们在linux上写代码,并运行程序时,经常会碰到程序执行到一半发生"segment fault"的错误,一头雾水,而且对这类问题的排查也是相当麻烦的一件事.而且我在面试的过程中也 ...
- linux学习记录-coredump segment fault
linux学习记录: 1.coredump:段错误; 总线错误; 程式记忆体区段错误; 链接:http://www.cnblogs.com/doctorqbw/archive/2011/12/21/2 ...
- 【转】造成segment fault,产生core dump的可能原因
2019独角兽企业重金招聘Python工程师标准>>> 1.内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字 ...
最新文章
- 关于学习Python的一点学习总结(45->反运算)
- 【数理逻辑】谓词逻辑 ( 谓词逻辑基本等值式 | 消除量词等值式 | 量词否定等值式 | 量词辖域收缩扩张等值式 | 量词分配等值式 )
- linux中sleep再循环里,Linux sleep 语句以及循环 测试负载
- android 数组赋值字符串_c语言中的字符数组与字符串
- Test_data detection-Illumination
- 获取对话框当前cfont_自绘对话框
- android 上线apk,码云 Android apk 在线构建功能上线啦!
- 动态规划走楼梯_负重爬楼梯、过草地,服贸会六足机械人展示“送水到家”
- jmeter环境配置
- Spring MVC 的常用注解
- 【数据库】数据库系统的结构(概念篇详解)
- snprintf函数用法
- 数据库索引 类型 (转载)
- 斗牛/牛牛经典算法java版
- 板邓:php+mayql分页原理及案例
- python重命名异常_Python:如何忽略异常并继续?
- 墨瞳漫画 升级vue2 踩坑
- AMD首批Zen4架构CPU,连低端R5单核性能都超英特尔旗舰,最高降价700元
- breakpoint()
- Python3.6笔记之腌制泡菜(pickle模块的用法)
热门文章
- python awk 读文件_测试python awk sed 读取文件指定位置时的性能
- VINS-Mono关键知识点总结——预积分和后端优化IMU部分
- 【AI不惑境】模型量化技术原理及其发展现状和展望
- 2022年全球及中国脂肪酸氯化物行业专项可行性与供需前景调研报告
- 全球及中国水刀机械行业发展态势及及投资决策建议报告2021年版
- 中国半挂车行业投资前景预测与十四五投资战略规划分析报告2021年版
- 中国机器人减速机行业十四五发展规划及未来需求预测报告2021-2027年
- 全球及中国真空管太阳能集热器行业竞争状况及投资策略研究报告2021年版
- 京东对话中国农民丰收节交易会 供应链下沉打通产销全链
- 性能测试四十八:Jenkins+Ant+Jmeter系统部署