free() invalid next size异常
来源:互联网 发布:如何在淘宝上卖鱼 资质 编辑:程序博客网 时间:2024/06/07 22:04
1.free了未分配的內存。
2.申請的內存未free。(個人覺得這個不太可能造成錯誤,只是會內存洩露)
3.在申請的內存中進行了內存的越界操作。多见于数组、结构体循环处理的时候,
这个时候有时会报 double free的异常
有时会报munmap_chunk的异常。
解决方法:(血泪教训)
(1) 检测需要的长度, 加长数组的长度
(2)数组操作的时候,不能大于数组的长度。
举个例子:
float *buffer;
buffer = (float *)calloc( 4, sizeof( float ) );
buffer[1]=2.5;
buffer[2]=2.5;
buffer[3]=2.5;
buffer[4]=2.5;
buffer[5]=2.5;
free(buffer);
calloc长度是4,但是必须有buffer[5],才报异常free invalid next size
如果调两遍free(buffer),就会报异常:double free or corruption...异常
下面用例子來验证一下第三种情況。
#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#defineMAX_NUM10int main(int argc,char **argv){char*str;str = (char*)malloc(sizeof(char)*MAX_NUM);if(!str)exit(-1);int i; for(i=0;i<MAX_NUM+2;i++){ str[i] = 'a';}free(str);return 0;}如果调两遍free(str),就会报异常:double free or corruption...异常free时必须置为NULL,这样才能不崩溃。free(str)str=NULL;
if(str)
free(str);由此,基本定位了崩溃原因:内存访问越界导致破坏了heap的数据结构。用valgrind在线下环境启动进程,试图重现崩溃或定位越界访问的代码,遗憾的是,脚本压了1个小时也没出现崩溃,而valgrind的输出报告也没有越界代码位置的提示。
最终,仔细检查源码后发现,在某个回调函数中,new出来的buffer接收完通过http post方式发送过来的2进制数据后,我又多写了1行代码,类似于:recv_buf[data_len] = '\0',导致越界多写1个字节,最终引起各种莫名其妙的内存崩溃。/home/lbg/KcfDsst/main.cpp:20: error: invalid conversion from 'void*' to 'char*' [-fpermissive]
char *tmp2;
int len1=2;
tmp2 = malloc(len2+1);
解决方法:tmp2 =(char*)malloc(len2+1);
我定义了一个类
class A{
//方法略
private:
File *a;//File为自定义类
char *name;
int count;
}
然后构造函数
A::A( char *fileName ){
int size = sizeof( fileName );
name = new char[ size + 1 ];}
解决:sizeof在这里应该是strlen
0 0
- free() invalid next size异常
- free(): invalid next size错误
- 1. free(): invalid next size (fast)
- C++ Error: free(): invalid next size (fast):
- *** glibc detected *** free(): invalid next size (fast) — should work?
- 当glibc detected *** free(): invalid next size (normal)出现
- 运行时错误:Error: free(): invalid next size (fast)
- free(): invalid next size (fast): 0x0000000000aa4430问题
- 问题记录-当glibc detected *** free(): invalid next size (normal)出现
- 问题记录-当glibc detected *** free(): invalid next size (normal)出现
- psql遇到的两个问题 Cannot read termcap database和 free(): invalid next size
- 记一个烦了我一下午到半夜的编程错误!free(): invalid next size (fast): 0xb73004e8 ***
- error realloc(): invalid next size 崩溃
- vs异常:invalid allocation size
- 内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]
- 内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]
- 与realloc(): invalid next size:斗争了一天 总结
- free(): invalid
- 【算法系列-11】回溯算法-八皇后
- sql联合查并统计子表符合的总数
- HDU 3639 Tarjan + 缩点 + 反建图 + 搜索
- hyper-v查看虚拟机启动顺序
- 异常小记
- free() invalid next size异常
- android实现截屏功能
- 利用python爬取人人贷网的数据
- 9.1 套接字可选性和IO缓冲大小
- XmlSerializer不能保存emoji表情
- 黑马Android视频教程最新
- poj 3984 bfs加递归记录路径题解
- sizeof与strlen及length(string类)
- AE CC 2015版本无法连接Media Encoder解救方法