博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Segmentation fault(Core Dump)
阅读量:5296 次
发布时间:2019-06-14

本文共 835 字,大约阅读时间需要 2 分钟。

Segmentation fault 这个提示还是比较常见的,这个提示就是段错误,这是翻译还是十分恰当的。

Core Dump 有的时候给我们呈现的翻译很有趣是”吐核“,但是实际上比较贴切的翻译是核心转储(是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试),这个“吐核”的产生和王安博士有着一些关联,其实“吐核”这个词形容的很恰当,就是核心内存吐出来。

出现这种错误可能的原因(其实就是访问了内存中不应该访问的东西):

  1,内存访问越界:

    (1) 数组访问越界,因为下标出超出了范围。

       (2) 搜索字符串的时候,通过字符串的结尾符号来判断结束,但是实际上没有这个结束符。

                (3)使用strcpy, strcat, sprintf, strcmp,strcasecmp等字符串操作函数,超出了字符中定义的可以存储的最大范围。使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。

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

  3,多线程读写的数据未加锁保护。

    对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则很容易造成核心转储

  4,非法指针

      (1)使用NULL指针

      (2)随意使用指针类型强制转换,因为在这种强制转换其实是很不安全的,因为在你不确认这个类型就应该是你转化的类型的时候,这样很容易出错,因为就会按照你强制转换的类型进行访问,这样就有可能访问到不应该访问的内存。

   5,堆栈溢出

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

 

转载于:https://www.cnblogs.com/foreverW/p/7295201.html

你可能感兴趣的文章
Linux 中【./】和【/】和【.】之间有什么区别?
查看>>
Ubuntu sudo 出现 is not in the sudoers file解决方案
查看>>
内存地址对齐
查看>>
看门狗 (监控芯片)
查看>>
#ifndef #define #endif
查看>>
css背景样式
查看>>
JavaScript介绍
查看>>
js中函数与对象的使用
查看>>
正则表达式
查看>>
开源网络漏洞扫描软件
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Hallo wolrd!
查看>>
16下学期进度条2
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
Chapter 3 Phenomenon——12
查看>>
中小学教育缴费遇到的一些问题
查看>>
C语言中求最大最小值的库函数
查看>>
SRS
查看>>
14.typescript-类与接口
查看>>