Segmentation fault (core dumped)解决方法

core dump gdb调试 core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump) 在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类型的... 阅读详情

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

在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类型的错误往往与指针操作相关。往往可以通过这样的方式进行定位。

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

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 堆栈溢出.

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

二 配置操作系统使其产生core文件

首先通过ulimit命 令查看一下系统是否配置支持了dump core的功能。通过ulimit -c或ulimit -a,可以查看core file大小的配置情况,如果为0,则表示系统关闭了dump core。可以通过ulimit -c unlimited来打开。若发生了段错误,但没有core dump,是由于系统禁止core文件的生成。
解决方法:

$ulimit -c unlimited  (只对当前shell进程有效)

或在~/.bashrc 的最后加入: ulimit -c unlimited (一劳永逸)

# ulimit -c
$ ulimit -a

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited

三 用gdb查看core文件

发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行.
gdb [exec file] [core file]
如: gdb ./test test.core

链接:http://blog.sina.com.cn/s/blog_75bf554501019cvt.html

如何轻松搞定 Segmentation fault ,看这篇就够了! 我相信每个程序员年轻的时候,在运行某程序,当屏幕弹出“Segmentation fault”时,你会变得非常焦虑,因为你不知道代码哪里跑挂了,初级程序员常常使用printf函数在怀疑点一个个的加打印去定位问题出在哪里了。 如果你熟悉gdb,你可能会使用gdb去运行这个程序,然后异常后执行backtrace(简写bt)命令打印异常调用栈。 但是gdb并不是万能的,例如程序运行一段... 阅读详情

相关推荐

Segmentation Fault错误原因总结

一、 什么是“Segmentation fault in Linux”所谓的段错误就是指访问的内存超过了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据

喜欢恋着风 60万+

Segmentation fault (core dumped)错误常见原因总结

1 问题原因 Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。对每个指针声明后进行初始化为NULL是避免这个问题的好办法。排除此问题的最好办法则是调试。 更为详细的原因: (1)内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符 c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp

longteng_guo的博客 10万+

【无标题】连接引起Segmentation fault (core dumped)问题的原因及解决方法

Segmentation fault”是一个特定的错误,发生在Unix和类Unix系统(比如Linux)中,当程序尝试访问它无权访问的内存区域时,操作系统会发送一个SIGSEGV信号给程序,导致程序终止并生成一个“core dump”文件(如果系统配置允许的话)。(backtrace)命令时看到 "No stack." 的消息,这通常意味着核心转储文件不包含有效的堆栈信息,或者。这将显示程序崩溃时的函数调用序列。如果 gdb 能够访问源代码,你还可以使用 list 命令来查看崩溃位置附近的源代码。

2301_79311842的博客 2514

Segmentation fault (core dumped)

这个的报错

doodlesomething 4万+

Segmentation fault (core dumped):段错误完美解决方法

Segmentation fault” 是指程序试图访问没有权限访问的内存段,通常是因为程序访问了未初始化的指针、越界访问数组,或者错误地操作了指针导致的。操作系统为了保护内存安全,会中止程序并给出错误提示:“Segmentation fault (core dumped)”。// 空指针*ptr = 10;// 解引用空指针return 0;这段代码会因为尝试解引用空指针而导致段错误,操作系统会终止程序并显示错误信息。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 2万+

Linux程序运行出现Segmentation fault (core dumped)的通用解决方法

之前v4l-test编译后运行时出现错误Segmentation fault (core dumped),段错误(核心已转储),因为代码不同,错误原因不一样,导致解决方法也不一样,所以找了许多都没有找到好的解决方法,最终在一篇博客发现这类问题的通用解决方法,博客地址如下: https://www.cnblogs.com/kuliuheng/p/11698378.html 1 问题原因 ...

qq_38892528的博客 7万+

Segmentation Fault (Core Dumped):段错误的完美解决方法

Segmentation Fault (Core Dumped)是指程序试图访问未被允许的内存区域而导致的错误。本文将详细分析导致段错误的原因,并提供实用的解决方法和代码示例,帮助开发者识别和修复代码中的错误。通过本篇文章,你将能够更好地理解段错误的本质,从而提高你的开发技能和代码质量。🔧Segmentation Fault(段错误)是操作系统在发现程序试图访问未被授权的内存区域时抛出的错误。操作系统会终止该程序的执行,并可能生成一个核心转储(core dump)文件,用于后续的调试和分析。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 3万+

ns2中dsr协议Segmentation fault (core dumped)解决方法

作者 正文 | 下一个主题 >>

霜之哀伤de专栏 5230

运行C++程序出现Segmentation fault (core dumped) 的可能解决方法

运行C++程序出现Segmentation fault (core dumped) 的可能解决方法

qq_39779233的博客 1173

core dumped 总结

core dumped

jacke121的专栏 339

pylab 导入报错segmentation fault (core dumped)解决方法

这里可能是matplotlib本身新版本的一个问题,当我在我的conda3里面安装了matplotlib之后,我发现报了如下错误。 介于网上没有解决方案,我这里整理一下,供大家参考。 [1] 1322 segmentation fault (core dumped) python get_position.py 这种情况下,我们需要重新安装一下matplotlib,安装一个低版本就可...

funnyPython的博客 1869

关于程序运行后出现Segmentation fault (core dumped)问题探讨

在这里插入代码片 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录在这里插入代码片前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowch

LSZ520LSZ的博客 8万+

sementation fault

段错误主要指访问的内存地址超出了系统给这个进程的内存空间。 通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度...

qq_37924084的博客 1837

linux系统下产生Segmentation faultSegmentation fault (core dumped)!!!

在Linux系统下,当程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息,编译时需要加上 -g -Wall)。我们使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。如何生成core文件和大小限制当系统程序运行产生而不是显示这说明,并没有产生code文件,我们需要执行以下命令来生成code文件,并限制文件大小。使用ulimit -c命令查看core文件的生成开关,如果结果为0,则表示关闭了此功能,不会生成core文件。

m0_73537205的博客 1万+

计算机系统的恶魔之门——详解Segmentation Fault

Segmentation Fault,简称"segfault",是指当程序在访问内存时,操作系统检测到非法的内存访问行为,例如试图读取或写入非法的内存地址,或者试图访问没有权限的内存区域时,操作系统会强制终止程序的执行,并生成一个Segmentation Fault错误信号。Segmentation Fault错误是计算机系统中常见的错误类型,本文从定义、产生原因、调试方法和预防措施等多个方面进行了详细解析。

m0_72410588的博客 1万+
上一篇: ubuntu使用apt-get 出现错误解决方案
下一篇: 用Boost库中的cpu_timer计算caffe测试时间
lemonaha
博客等级 码龄11年 41粉丝 61原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值