定位问题:*** glibc detected *** : double free or corruption (!prev): 0x09b077d8

定位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. }  

 

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

#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)




from: http://blog.csdn.net/cuiyifang/article/details/8237569

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值