一个月的时间,就为了解决一个问题,段错误

运行环境:arm-linux

模块:XML,为多线程,多socket的网络通信协议程序

现象:XML在运行一段时间以后,出现段错误,运行的时间和出现问题的地方都不一样;

解决的过程:

1、仔细检查了所有的动态申请内存和释放的地方;

2、将所有的strcpy改为strncpy,sprintf改为snprintf;

3、检查了所有的数组的边界问题;

4、将所有多线程互用的全局变量用互斥保护起来;

5、检查所有的多线程互用的函数,发现了三个不安全的函数,将strerrno改为strerror_r,gmtime改为gmtime_r, gethostbyname改为gethostbyname_r;

至此,还是崩掉。欲哭无泪

6、最后的原因:XML为一个多线程进程,多线程都会调用一个共享库函数,该函数是一个线程不安全的函数,他会调用malloc和free,

/// 行

struct LineIni

{

char line[MAX_LINE_LEN] ;    ///< 行的原来

int nPosEqual ;

struct LineIni * next ;    ///< 下一行

};

static struct LineIni LineHead ;

由于共享库函数中有static变量,而该变量中又是一个动态的指针链,导致多线程调用时,该变量被破坏,malloc和free就会出错。

这就是为什么我用gdb跟踪,始终无法地位,只是弹出Program received signal SIGSEGV, Segmentation fault.

[Switching to Thread 131081 (LWP 568)]

0x403f8784 in mallopt () from /lib/libc.so.6

不想推卸责任,可这毕竟是以前同事写的代码。

问题解决了,我没有一丝的喜悦。我知道,我已疲倦。

linux多进程 段错误,关于段错误相关推荐

  1. linux at24c 前几个字节错误,Linux下的段错误产生的原因及调试方法

    简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由 ...

  2. LINUX I2C驱动偶尔出现段错误原因之一

    LINUX I2C驱动偶尔出现段错误原因之一 第一篇博客,来个好的开端. 在自己写 触摸屏 I2C 驱动程序(Linux 3.14)的时候,加载的时候会偶尔出现段错误, 我们都知道在加载驱动的时候会调 ...

  3. php段错误coredumped,段错误 (core dumped)

    当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方.最常出现的,几乎所有C程序员都出现过的错误就是"段错误"了.也是最难查出问题原 ...

  4. pta c语言段错误,PTA常见错误

    1.最常犯的错误:格式错误. 在PTA程序检测中,输入输出要严格按照题目要求.输出的格式要完全按照题目要求来,该空格地方空格,该换行要换行.否则,就算你运行结果是对的,PTA还是提示你格式错误 格式错 ...

  5. 什么是段错误,段内,段间

    https://zhidao.baidu.com/question/447013382.html 段错误:指访问的内存超出了系统所给这个程序的内存空间. 汇编语言的程序设计是分4个段来设计的,即用来放 ...

  6. UNIX的段错误和总线错误和Windows的保护性异常

    UNIX的段错误和总线错误和Windows的保护性异常 Table of Contents 1 介绍 2 可能原因 1 介绍 编写C程序的时候,程序运行在类Unix系统上可能会报"segme ...

  7. linux shell编程时报:bad substitution错误的解决办法

    :bad substitution错误 应该是某个变量名字打错,找不对应的值对替换,直接报错结果: 检索全文中替换的${}变量,改正即可. 示例: 我用Linux shell脚本输出一段文字生成一个R ...

  8. Linux总线pice错误,PCIe总线错误严重性=已更正

    问题描述 我有一个新的HP Pavilion游戏笔记本和一个新的Ubuntu 16.04安装.当我按下Ctrl + Alt + F1时,我开始看到下图中显示的错误,它不允许我与控制台交互: 我每次启动 ...

  9. 成功解决解决VM软件安装Linux的Ubuntu过程,开启Linux出现Oprating System not found错误

    Linux:解决VM软件安装Linux的Ubuntu过程中,开启Linux出现Oprating System not found错误 导读 最讨厌网上回答的啰嗦和不清晰!本人最讨厌啰嗦,直接上来,图文 ...

  10. linux代码段映射,bss,data,text,rodata,堆,栈,常量段与其各段在物理存储中关系

    本文想从linux出发[目前还想可不可以从51单片机出发],解答程序代码和各种数据结构是如何存储(映射)到存储区的. 目前未完成整理,还是初稿的想法.bss段: BSS段(bsssegment)通常是 ...

最新文章

  1. remote: HTTP Basic: Access denied
  2. document.body ,window.screen javascript对象属性取值意义
  3. 获取Http协议的请求行,请求头
  4. 深度学习(十五)——SPPNet, Fast R-CNN
  5. error: unpacking of archive failed on file错误的解决
  6. ShuttleFlow 2.0版本跨链协议上线,同时支持OKExChain、Heco及BSC双向互操作
  7. MongoDB - 使用Python操作MongoDB
  8. JavaScript高级程序设计(第3版)中文高清完整pdf
  9. iOS 播放系统提示音和震动
  10. 微信小程序 公众号 订阅消息 模板 正则 参数校验
  11. linux支持的阵列硬盘柜,在Linux上玩好 硬盘 阵列
  12. 识别植物的软件有哪些?快把这些软件收好
  13. visual studio code远程连接服务器
  14. Lambda表达式和Stream类的使用
  15. linux下使用打印机
  16. YOLOv7默默更新了Anchor-Free | 无痛再涨1.4mAP
  17. 【python学习】——为exe软件创建快捷方式;实现软件自启动
  18. 排列宝石问题C++实现
  19. C++ 读入整行带空格的字符串,并将字符串按照特定符号划分成多个子串
  20. springMVC的三种视图解析器ViewResolver

热门文章

  1. 国家开放大学2021春1032成本管理题目
  2. 一分钟了解:zigbee的三种关键角色(视频讲解)
  3. android前台进程视频教程,Android Twilio视频通话,唤醒应用程序并进入前台
  4. ue 编写linux脚本,UltraEdit23 sh文件 (shell脚本)着色
  5. linux redhat 命令大全,redhat Linux命令大全
  6. 同源策略为什么可以防csrf_Spring Security 如何预防CSRF跨域攻击?
  7. c语言如何随机获取1kb,基于VS2010+C语言实现播放器的顺序播放、随机播放
  8. python中sorted的用法append_Python中高阶函数sorted()用法
  9. 简单排序--冒泡排序
  10. nodejs 进阶:图片缩小