double free or corruption的原因(2)
来源:互联网 发布:java list 相同的元素 编辑:程序博客网 时间:2024/06/13 08:55
先来段代码:
的注释,运行后会报错:
各种百思不得其解啊... 各种百度各种头疼后,突然顿悟,原来是realloc的原因。前几天看realloc的原型时,把
extern void *realloc(void *mem_address, unsigned int newsize);
看错成:
extern void realloc(void *mem_address, unsigned int newsize);
结果导致找了好久的错。这一行应该改为也就是说,malloc(114)使得原有的malloc后面的块不足以分配(200-100)大小的内存,于是realloc找到了一块新的内存,把原来的内存数据搬运到新的内存中,原内存在realloc内被释放掉了,而当运行第二次的realloc时,realloc内部再次进行 "找新内存 → 搬家 → free原内存” 的过程,因此出现了二次free的情况。
01
#include <stdio.h>
02
#include <malloc.h>
03
04
#define DEBUG() printf("lines: %d\n", __LINE__); fflush(stdout);
05
06
int
main(
void
)
07
{
08
void
* p =
malloc
(100);
09
DEBUG();
10
11
//void* p2 = malloc(114);
12
DEBUG();
13
14
realloc
(p, 200);
15
DEBUG();
16
17
realloc
(p, 300);
18
DEBUG();
19
20
return
0;
21
}
gcc main.c -o main && ./main
运行后无误,然后去掉
1
//void* p2 = malloc(114);
01
…………
02
*** glibc detected *** ./main: double
free
or corruption (!prev): 0x09211008 ***
03
======= Backtrace: =========
04
/lib/libc.so.6[0x7cd5a5]
05
/lib/libc.so.6[0x7cf7bc]
06
/lib/libc.so.6(realloc+0xe6)[0x7d0386]
07
./main[0x80484ec]
08
/lib/libc.so.6(__libc_start_main+0xdc)[0x779e9c]
09
./main[0x8048381]
10
======= Memory map: ========
11
00746000-00760000 r-xp 00000000 08:02 4196833 /lib/ld-2.5.so
12
00760000-00761000 r-xp 00019000 08:02 4196833 /lib/ld-2.5.so
13
…………
extern void *realloc(void *mem_address, unsigned int newsize);
看错成:
extern void realloc(void *mem_address, unsigned int newsize);
结果导致找了好久的错。
解决方法:
1
realloc
(p, 200);
1
p =
realloc
(p, 200);
0 0
- double free or corruption的原因(2)
- double free or corruption
- double free or corruption
- 【问题】double free or corruption
- 问题:double free or corruption
- double free or corruption 错误解决办法
- *** glibc detected *** double free or corruption (out) ***
- double free or corruption (!prev):错误
- *** glibc detected *** double free or corruption (fasttop)
- double free or corruption (fasttop)产生
- double free or corruption (fasttop): 0x080ca728
- *** glibc detected *** double free or corruption (fasttop)
- c++ double free or corruption (!prev)
- error in 'appstreamcli':double free or corruption
- 关于执行free函数的时候提示” double free or corruption“错误的解释和解决办法
- debug c++ 经验积累(1)-double free or corruption (!prev)
- glibc detected double free or corruption error问题解决
- *** glibc detected *** double free or corruption: 0x0937d008 *** 错误
- Integer to Roman
- Java基础加强
- Oracle 非归档(noarchive log)与归档(archive log)之间转换
- hbase 0.94.20稳定版_伪分布式安装_hbase入门学习一
- 快速解决打印机后台程序服务没有运行的问题
- double free or corruption的原因(2)
- 设计模式之单例模式(C++)
- 《Head First 设计模式》学习笔记——复合模式
- dom4j操作XML
- sublime text 2 html 格式化
- JAVA 吸血鬼数字学习
- struts
- 多线程
- Leetcode Python Palindrome Number