定位错误:glibc detected :double free or corruption (!prev): 0x08a03b88

参考自:

http://topic.csdn.net/u/20090812/15/43cae1c5-938d-4dac-a5f2-192f262d30f5.html

 

定位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 <stdio.h>
#include <stdlib.h>



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)

int
main(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)

转自:http://socol.iteye.com/blog/695872

posted @ 2011-11-22 15:58  夏大王  阅读(2518)  评论(0编辑  收藏  举报