博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定位错误:glibc detected :double free or corruption (!prev): 0x08a03b88
阅读量:7111 次
发布时间:2019-06-28

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

参考自:

 

定位free/malloc的位置和参数,可以在对应的.cpp/.h文件中添加:

 

C代码  
  1. #include <stdio.h>   
  2. #include <stdlib.h>   
  3.   
  4.   
  5.   
  6. void *   
  7. debug_malloc(size_t size, const char *file, int line, const char *func)   
  8. {   
  9.         void *p;   
  10.   
  11.         p = malloc(size);   
  12.         printf("%s:%d:%s:malloc(%ld): p=0x%lx\n",   
  13.             file, line, func, size, (unsigned long)p);   
  14.         return p;   
  15. }   
  16.   
  17. #define malloc(s) debug_malloc(s, __FILE__, __LINE__, __func__)   
  18. #define free(p)  do {                                                   \   
  19.         printf("%s:%d:%s:free(0x%lx)\n", __FILE__, __LINE__,            \   
  20.             __func__, (unsigned long)p);                                \   
  21.         free(p);                                                        \   
  22. while (0)   
  23.   
  24. int  
  25. main(int argc, char *argv[])   
  26. {   
  27.         char *p;   
  28.         p = malloc(1024);   
  29.         free(p);   
  30.         return 0;   
  31. }  
#include 
#include
void *debug_malloc(size_t size, const char *file, int line, const char *func){ void *p; p = malloc(size); printf("%s:%d:%s:malloc(%ld): p=0x%lx\n", file, line, func, size, (unsigned long)p); return p;}#define malloc(s) debug_malloc(s, __FILE__, __LINE__, __func__)#define free(p) do { \ printf("%s:%d:%s:free(0x%lx)\n", __FILE__, __LINE__, \ __func__, (unsigned long)p); \ free(p); \} while (0)intmain(int argc, char *argv[]){ char *p; p = malloc(1024); free(p); return 0;}

 

延伸一下,如果想在不改动原来代码的情况下跳过这个错误,则可以将上述代码再重新改写一下:

#define malloc(s) debug_malloc(s, __FILE__, __LINE__, __func__)

#define free(p)  do {                                                                                   \
        printf("%s:%d:%s:free(0x%lx)\n", __FILE__, __LINE__,            \
            __func__, (unsigned long)p);                                                       \

        if (p) {                                                                                                     \

          free(p);                                                                                                 \

          p = NULL;                                                                                           \

       }                                                                                                               \

} while (0)

转自:

转载于:https://www.cnblogs.com/fly-fish/archive/2011/11/22/2258933.html

你可能感兴趣的文章
Python split()方法
查看>>
Linux~连接windows的ftp,unzip出现的问题
查看>>
arcgis api for js入门开发系列九热力图效果
查看>>
MySql无法远程登录以及IP被锁解决办法
查看>>
BZOJ 2716: [Violet 3]天使玩偶 [CDQ分治]
查看>>
温故而知新 小测试
查看>>
CSS margin-top 属性
查看>>
YxdJSON - Delphi 高性能 JSON 库(支持RTTI和序列化操作)
查看>>
C# 根据注册表获取当前用户的常用目录整理
查看>>
Python如何输出包含在对象中的中文字符?
查看>>
.NET Core项目从xproj+project.json向csproj迁移简介
查看>>
【转】浏览器的渲染原理
查看>>
如何使用光盘刻录大师旋转视频文件
查看>>
Linux前台的程序转到后台执行(关闭终端而不杀死命令)
查看>>
PS 如何把大嘴变小嘴
查看>>
Tomcat指定特定JDK版本
查看>>
JS字典 Dictionary类
查看>>
分离你的spring配置文件,让结构更清晰
查看>>
杜教筛 [学习笔记]【更新中】
查看>>
2014年辛星解读Javascript之DOM之事件及其绑定
查看>>