写了一个多线程的代码,在主线程中申请了一块内存,在另一个线程中释放内存,老出错误,不知道是怎么回事。

*** glibc detected *** /home/ydx/vehicle-program/vehicle-v1.0/t: double free or corruption (!prev): 0x080644c8 ***
======= Backtrace: =========
/lib/libc.so.6[0x7c7261]
/home/ydx/vehicle-program/vehicle-v1.0/t[0x804991e]
/home/ydx/vehicle-program/vehicle-v1.0/t[0x8048fb0]
/lib/libpthread.so.0[0x8dcab5]
/lib/libc.so.6(clone+0x5e)[0x83383e]

00759000-008c7000 r-xp 00000000 fd:00 158969     /lib/libc-2.11.so
008c7000-008c8000 ---p 0016e000 fd:00 158969     /lib/libc-2.11.so
008c8000-008ca000 r--p 0016e000 fd:00 158969     /lib/libc-2.11.so
008ca000-008cb000 rw-p 00170000 fd:00 158969     /lib/libc-2.11.so

查找了好长时间的原因,都没找到,最后找到的原因原因如下

1。并没有double free,这一点是肯定的

原因:

n=get_node(STATINFO_SIZE);//申请了一个160字节的区域

调用sprintf函数向这个区域写的字节数是远大于160字节的

释放的时候就会出现这种问题

可能sprintf打印的字节数超过160字节时,没有报错,释放的时候要全部释放,超过160字节,就报出了段错误

为了解决这种无意识的错误,以后要用这个函数

黑客通常利用这类脆弱的代码来入侵看上去安全的系统。要修正这一缺陷,可以使用函数snprintf() 代替函数sprintf(),函数snprintf() 的原型为:
intsnprintf(char* buf, size_t maxlen, const char* fmt, ...); 
第二个参数定义能被写到 buf 中的字符的最大个数,不考虑格式标志以及源字符串的大小:    
snprintf(buf, 10, "%10s",p); //now safef("hello world!"); //string is chopped to "hello worl" 
相似的,使用strncpy()、strncmp()、strncat()、strnicmp() 和 strnset() 相应地代替strcmp()、strcat()、stricmp() 和 strset()。

转载于:https://www.cnblogs.com/balaamwe/archive/2012/01/12/2321075.html

[转]double free or corruption (!prev): 0x080644c8 ***相关推荐

  1. c语言代码re通常什么错误,C语言,realloc动态内存申请,出现报错double free or corruption (!prev)...

    程序大概如下: #include #include #include #include #include #define MALLOC(num,type) (type*)alloc((num)*siz ...

  2. double free or corruption (!prev)

    环境:linux,g++4.9,qt4.8.7 关闭应用程序时崩溃,下面是qtcreator应用程序输出窗口信息: *** Error in `/home/test/source/Ofd_Pro_Ma ...

  3. vscode pytorch在debug时遇到问题:Error in `python‘: double free or corruption (prev)

    问题描述:在做一个深度学习计算机视觉的项目时,直接clone下来的代码可以在vscode里正常运行,但是debug时出现error,报错信息为: *** Error in `python': doub ...

  4. 定义QTimer引发的异常:double free or corruption (!prev)

    错误提示: 最近遇到一个有点意思的现象,一份代码运行正常,但是只要在代码中添加了一个QTimer变量,则程序退出时异常结束,错误提示如下: double free or corruption (!pr ...

  5. c++ double free or corruption (!prev)

    最简单方法: if (p) {                                                                                     ...

  6. double free or corruption的原因

    为什么80%的码农都做不了架构师?>>>    先来段代码: #include <stdio.h> #include <malloc.h>#define DE ...

  7. C 编程异常 — double free or corruption (fasttop)

    问题:运行代码的时候程序崩溃. *** Error in `./parsing': double free or corruption (fasttop): 0x00000000023d2350 ** ...

  8. apt update报错:Error in `appstreamcli‘: double free or corruption ... Aborted ...(libappstream3)

    原因: ubuntu16.0.4内置的libappstream是2.0以前的版本,我们必须更新到3.0以上的版本才可以 解决方法: 清除libappstream3(purge比remove多清理配置文 ...

  9. python double free_python错误:double free或corruption(out):0x0000000001e4b030

    dataset" rel="nofollow noreferrer">Code &source ubuntu 16.04 GNU收音机3.7.12 UHD ...

最新文章

  1. hdu3549(又是最大流模板题)
  2. id文件夹怎样传入服务器,服务器id怎么设置
  3. input上传图片;input上传file;vue上传图片。
  4. 【博客园2018总结帖】21天,在Github上获取 6300 star
  5. Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector
  6. LVM的创建扩展缩减与删除
  7. 1 ELK安装部署并监控nginx
  8. Windows7如何显示文件后缀
  9. 微信小程序获取openid(用户唯一身份识别)
  10. App逆向——安卓7以上如何安装抓取https的包
  11. 申报高新技术企业的好处
  12. 人工智能——归结推理
  13. 图片损坏打不开如何修复?
  14. to be continued
  15. 朋友圈如何分享pdf
  16. 小白修神传~程序员成神之路
  17. 李永乐(六)线性相关——笔记
  18. [免费专栏] Android安全之Android加密算法浅析
  19. cgm 转jpg java_获取图片,音频,视频,压缩包文件类型的工具类
  20. 厦门理工学院 oj-1184 默罕默德的炸弹

热门文章

  1. lua学习笔记之数据结构
  2. NameServer的总控逻辑
  3. 行为模式之Observer模式
  4. HDU1753 大明A+B(大数相加)(Java题解)
  5. Android Message 及其使用
  6. cmd - 命令行窗口中文乱码
  7. Windows Phone Developer Tools Beta 发布
  8. PyCharm缺少cv2模块怎么办?怎样在PyCharm中安装自己需要的package?
  9. oracle的schema的基本概念及与User的区别
  10. leetcode算法题--增量元素之间的最大差值