定位错误: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文件中添加:
- #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;
- }
#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)
 
                    
                



 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号