定位问题:*** glibc detected *** : double free or corruption (!prev): 0x09b077d8
2015-07-15 15:33
531 查看
定位free/malloc的位置和参数,可以在对应的.cpp/.h文件中添加:
C代码
#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)
from: http://blog.csdn.net/cuiyifang/article/details/8237569
C代码
#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)
from: http://blog.csdn.net/cuiyifang/article/details/8237569
相关文章推荐
- Springmvc JSON交互
- 编译和链接的区别联系
- 【转】Java并发编程:Thread类的使用
- C#中调用MySQL存储过程的方法
- SQLServer 2008中用T-SQL创建邮件
- Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
- [C++设计模式] decorator 装饰者模式
- JQuery一些基础点区分
- Java项目经验
- 解决STM32 SPI 半残废 NSS无法拉高
- C/C++中Sqlite使用简介
- `java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener`
- Spring MVC重定向
- HDU 4978 A simple probability problem.(概率模型+凸包周长)
- post方式提交数据
- 预防SQL注入攻击
- EF: Returns multi table from procedure
- IE6、7下不显示前面小圆点bug
- Android开发之Touch事件的分发机制
- Centos 5.8安裝Xen linux&windows 虛擬機