社区
C++ 语言
帖子详情
这是什么问题 free(): invalid next size (fast)
qshhnkf
2009-12-18 06:08:53
这两天些程序,用new创建一个char数组,然后delete掉,编译器报错free(): invalid next size (fast)。我网上查了查,感觉是因为越界操作的原因,因为担心是中间的某步操作非法,new出来后立刻delete,编译器还是报相同的错误,不知是什么原因?卡了一天了,诸位朋友赐教,谢谢先!
PS:new返回的有地址。。。
...全文
2574
24
打赏
收藏
这是什么问题 free(): invalid next size (fast)
这两天些程序,用new创建一个char数组,然后delete掉,编译器报错free(): invalid next size (fast)。我网上查了查,感觉是因为越界操作的原因,因为担心是中间的某步操作非法,new出来后立刻delete,编译器还是报相同的错误,不知是什么原因?卡了一天了,诸位朋友赐教,谢谢先! PS:new返回的有地址。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qshhnkf
2009-12-19
打赏
举报
回复
疯了~~~strlen用成了sizeof,哎~~~
猫已经找不回了
2009-12-19
打赏
举报
回复
贴代码、
困了你就睡
2009-12-19
打赏
举报
回复
[Quote=引用 23 楼 qshhnkf 的回复:]
疯了~~~strlen用成了sizeof,哎~~~
[/Quote]
狂晕。。。
qshhnkf
2009-12-19
打赏
举报
回复
找到问题了,不过感觉是系统内存分配的问题啊。。。
我定义了一个类
class A{
//方法略
private:
File *a;//File为自定义类
char *name;
int count;
}
然后构造函数
A::A( char *fileName ){
int size = sizeof( fileName );
name = new char[ size + 1 ];
}
之后我又new了另外一个类的对象b,立刻输出A::name(正确的应该为../test/test_f0)发现尾部字符被冲,于是检查name的地址与b的首地址距离太近。
不知这是系统问题还是程序问题?
还有,之前的内存越界错误为何会在后续的内存操作中反应出来?
qshhnkf
2009-12-18
打赏
举报
回复
但是无操作删除会报错该怎么解释呢?这点实在想不明白。。。
「已注销」
2009-12-18
打赏
举报
回复
[Quote=引用 15 楼 qshhnkf 的回复:]
一样的结果,而且这个问题不是常有的。
我在跑测试用例,有的可以顺利通过这段代码,有的不行。。。实在没辙了。。。
[/Quote]
那我只能说:这种错误主要是因为指针越界造成的!
检查有无
指针越界
的可能性吧。
qshhnkf
2009-12-18
打赏
举报
回复
[Quote=引用 16 楼 lovewanghongchao 的回复:]
引用楼主 qshhnkf 的回复:
这两天些程序,用new创建一个char数组,然后delete掉,编译器报错free(): invalid next size (fast)。
用vc6.0还是vs2008?申请和释放heap时最好统一,new了再delete会报错free()的?是不是哪用了malloc()?
[/Quote]linux gcc编译
qshhnkf
2009-12-18
打赏
举报
回复
user want to write something
create success position 0x9127080
*** glibc detected *** ./nachos: free(): invalid next size (fast): 0x09127080 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7d57604]
/lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7d595b6]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb7f3a231]
/usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0xb7f3a28d]
运行时报错,上面两行是测试是的输出
困了你就睡
2009-12-18
打赏
举报
回复
[Quote=引用楼主 qshhnkf 的回复:]
这两天些程序,用new创建一个char数组,然后delete掉,编译器报错free(): invalid next size (fast)。
[/Quote]
用vc6.0还是vs2008?申请和释放heap时最好统一,new了再delete会报错free()的?是不是哪用了malloc()?
qshhnkf
2009-12-18
打赏
举报
回复
一样的结果,而且这个问题不是常有的。
我在跑测试用例,有的可以顺利通过这段代码,有的不行。。。实在没辙了。。。
「已注销」
2009-12-18
打赏
举报
回复
[Quote=引用 10 楼 kouwenlong 的回复:]
你先判断一下,是否真的new成功了。
如果new成功了,没理由delete错误。
[/Quote]
什么编译器?这么厉害?
是否抛出了异常?
试用:
char *myBuffer = new
(std::nothrow)
char[ size + 1 ];
看看。
qshhnkf
2009-12-18
打赏
举报
回复
[Quote=引用 12 楼 kouwenlong 的回复:]
引用 11 楼 qshhnkf 的回复:
引用 10 楼 kouwenlong 的回复:
你先判断一下,是否真的new成功了。
如果new成功了,没理由delete错误。
是啊,所以我也很奇怪啊。。。
你从新建一个工程,输入以上代码的话,绝对不可能错。
[/Quote]同意!
kouwenlong
2009-12-18
打赏
举报
回复
[Quote=引用 11 楼 qshhnkf 的回复:]
引用 10 楼 kouwenlong 的回复:
你先判断一下,是否真的new成功了。
如果new成功了,没理由delete错误。
是啊,所以我也很奇怪啊。。。
[/Quote]
你从新建一个工程,输入以上代码的话,绝对不可能错。
qshhnkf
2009-12-18
打赏
举报
回复
[Quote=引用 10 楼 kouwenlong 的回复:]
你先判断一下,是否真的new成功了。
如果new成功了,没理由delete错误。
[/Quote]是啊,所以我也很奇怪啊。。。
kouwenlong
2009-12-18
打赏
举报
回复
你先判断一下,是否真的new成功了。
如果new成功了,没理由delete错误。
qshhnkf
2009-12-18
打赏
举报
回复
帖子中描述的象这样
char *myBuffer = new char[ size + 1 ];
delete [] myBuffer;
这样连着写,就会报错。
qshhnkf
2009-12-18
打赏
举报
回复
也没有,而且是个局部变量。
不是不贴代码,是代码太多了,中间调了几个函数,贴出来更麻烦。
「已注销」
2009-12-18
打赏
举报
回复
[Quote=引用 5 楼 qshhnkf 的回复:]
如果这两点都注意到了呢?
[/Quote]
是否重载了全局的operator new?
kouwenlong
2009-12-18
打赏
举报
回复
[Quote=引用 5 楼 qshhnkf 的回复:]
如果这两点都注意到了呢?
[/Quote]
就不能贴下代码?
qshhnkf
2009-12-18
打赏
举报
回复
如果这两点都注意到了呢?
加载更多回复(4)
free
():
invalid
next
size
(
fast
):错误及解决方案
./a.out:
free
():
invalid
next
size
(
fast
): 0x000000000c29d010 *** 今天在翻写算法的时候,出现了以上的错误 这种错误的原因: 一般是对内存进行非法的写操作,然后
free
的时候就会报上面的错误 贴源码: 我这边malloc的时候是申请的50个字节的内存大小(原本的意思是要申请50*8个字节的大小的)。原本的意思是要申请50*8的内存大小,存放50个double类型的变量的。 结果可能是之前开发的时候,一直是申请的char 类型
free
():
invalid
next
size
(
fast
): 0x000000xxx
记一次错误 遇到
free
():
invalid
next
size
(
fast
): 0x000000xxx
问题
时,用gdb调试找到错误定位。一般这类
问题
可能有如下三种情况: 1.内存越界写入,如指针、容器等; 2.
free
了已经被释放的内存指针,或者释放了没有内存没有申请成功的指针 3.指向
free
对象的指针不正确,释放的指针不是malloc时返回的指针; 然而需要注意的是,可能内存泄露的并不是调试定位处的对象。其它地方的内存泄露可能没有及时体现出来,在定位处操作内存时程序报错。 解决方法: 可以将定位处以
记一次内存泄漏(
free
():
invalid
next
size
(
fast
))
第(3)个title提醒了我。找到了错误原由 在项目开发中,调试发现:
free
():
invalid
next
size
(
fast
): 0x0000000001bd2e10 *** 错误类型为内存泄露错误。 后经查阅内存泄露得知导致内存泄露的原因可能有以下几种: (1)
free
了没有分配的内存 (2)分配了内存忘记释放也有可能会出现这样的
问题
。 (3)数组循环的时候越界了 ,写到了其他的内存里面, 然后
free
那个区域就会出现这样的
问题
。 经核实我的
问题
不属于以上三种情况,源代码如下: ...
问题
free
():
invalid
next
size
(
fast
): 0x0000000001475e70 ***
在刷LeetCode算法题时,出现一个这样的
问题
,
free
():
invalid
next
size
(
fast
): 0x0000000001475e70 *** 是因为对指针0x08d82008指向的空间,进行写操作超过了他实际申请的大小,具体到程序中是因为申请了大小为n的数组vector<int> Q(n),却要去访问位置Q[n]等超出n范围的元素...
Error in `./a.out‘:
free
():
invalid
next
size
(
fast
): 0x0000000001da8010
Error in `./a.out’:
free
():
invalid
next
size
(
fast
): 0x0000000001da8010 *** Error in `./a.out':
free
():
invalid
next
size
(
fast
): 0x0000000001da8010 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x777f5)[0x7f216399b7f5] /lib/x86_64-lin
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章