双倍释放或内存损坏
Double free or memory corruption
我有一个类似的代码
char *verboseBuf = NULL;
if(somethin){
for(a loop){
for(another loop){
if(somethin else){
if(curl execution){
if(fail){
verboseBuf = (char *) malloc(sizeof(char) * (currSize +1));
fread(verboseBuf, 1, currSize, verboseFd);
verboseBuf[currSize + 1] = ' ';
string verbose = verboseBuf;
free(verboseBuf);
}
}
}
}
}
}
我唯一使用verboseBuf的地方是在最后的if循环中。但是我有
*** glibc detected *** ./test: double free or corruption (!prev): 0x13c13290 ***
但是,如果我只在一个地方使用它,怎么能两次释放它呢?每次我使用它,我都会把它释放出来。我试着使用addr2line来找到它之前被释放的地方,但得到的只是一个??:0
。
这一行正在写入超过缓冲区末尾的一个字节。
verboseBuf[currSize + 1] = ' ';
该消息并不意味着您释放了两次东西,它意味着glibc检测到堆损坏,释放两次东西是常见的原因之一,但不是唯一的原因。
在这种情况下,线路
verboseBuf[currSize + 1] = ' ';
溢出了缓冲区的末尾,破坏了分配器存储在它之后的任何记账数据。删除+1,它应该可以工作了。
将verboseBuf[currSize + 1] = ' ';
设为verboseBuf[currSize] = ' ';
相关文章:
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在调试 malloc():新内存损坏
- 仅特定内核计数上的 MPI 内存损坏
- C++程序错误:malloc():内存损坏
- 调用std::函数成员时内存损坏
- C++ 内存损坏检测
- 由于标头中的 #define 不匹配而导致内存损坏
- C STD ::线程中的种族状况或内存损坏
- malloc()内存损坏仅通过为特定数量编写int数组
- 字符串标记化期间的内存损坏
- 从检测到 glibc 正常退出 - malloc():内存损坏
- 放置在外部 DLL 中的类中的字符串数据的内存损坏
- std :: string ::擦除会导致内存损坏
- 编译器如何检测内存损坏
- mix_playMusic导致内存损坏
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- 两个内联程序集调用与一个内联程序集调用中的内存损坏?
- 如何调试不确定内存损坏?
- 增强Dijkstra代码会导致片段内存损坏
- 内存损坏从vb.net调用c dll