文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于段错误

关于段错误

时间:2009-05-05  来源:白石

一个月的时间,就为了解决一个问题,段错误     运行环境: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

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

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

相关阅读 更多 +
排行榜 更多 +
大武道最新版

大武道最新版

休闲益智 下载
宝宝巴士手机版(babybus)

宝宝巴士手机版(babybus)

休闲益智 下载
宝宝巴士快乐启蒙游戏

宝宝巴士快乐启蒙游戏

休闲益智 下载