Closed. This question is not reproducible or was caused by typos。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
6年前关闭。
Improve this question
我有一个在ubuntu 13.10上运行的c++程序。
我随机遇到错误
搜索Error: free(): invalid next size (fast):之后,我发现此错误与内存分配/删除有关。
然后,我使用eclipse进行调试,并确定目标位置。我发现至少有两个有关此错误的提示。
释放这样的数据结构时会发生此错误-std::vector > 使用优化编译程序时,出现错误。如果不进行优化就进行编译,则不会出现错误。
我完成的所有动态内存分配都是通过STL完成的,例如push_back,resize等。
有人知道如何解决此错误吗?
线程[1] 4932 [核心:2](已暂停:信号:SIGABRT:已中止)
__GI_raise()上升。c:56 0x7ffff752ef77
__GI_abort()在abort.c:90 0x7ffff75325e8
__libc_message()位于libc_fatal.c:199 0x7ffff756c4fb
位于malloc.c的malloc_printerr():4,923 0x7ffff7578996
_int_free()在malloc.c:3,779 0x7ffff7578996
在new_allocator.h处的deallocate():110 0x416805
_M_deallocate()在STL_vector.h:174 0x416805
〜_Vector_base()在STL_vector.h:160 0x416805
〜在STL_vector.h处的vector():416 0x416805
_Destroy>()在STL_construct.h:93 0x416805
__destroy *>()在STL_construct.h:103 0x416805
_Destroy *>()在STL_construct.h:126 0x416805
_Destroy *,std::vector>()在STL_construct.h:151 0x416805
std::vector>,std::allocator>>::〜vector()在STL_vector.h:415 0x416805
位于my_class.cpp的TokenPassBasedDTW():2,203 0x40b237
my_class.cpp上的InitialVec_Token():2292 0x41318d
RUNMANAGER::TokenPassDecoder()位于my_class.cpp:2,485 0x413993
main()位于main.cpp:77 0x402774
@dasblinkenlight,这是个人资料吗?
程序概述:
当我执行Matrix_A.clear()时发生错误;
应该读
不确定
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
6年前关闭。
Improve this question
我有一个在ubuntu 13.10上运行的c++程序。
我随机遇到错误
free(): invalid next size (fast)
。搜索Error: free(): invalid next size (fast):之后,我发现此错误与内存分配/删除有关。
然后,我使用eclipse进行调试,并确定目标位置。我发现至少有两个有关此错误的提示。
我完成的所有动态内存分配都是通过STL完成的,例如push_back,resize等。
有人知道如何解决此错误吗?
线程[1] 4932 [核心:2](已暂停:信号:SIGABRT:已中止)
__GI_raise()上升。c:56 0x7ffff752ef77
__GI_abort()在abort.c:90 0x7ffff75325e8
__libc_message()位于libc_fatal.c:199 0x7ffff756c4fb
位于malloc.c的malloc_printerr():4,923 0x7ffff7578996
_int_free()在malloc.c:3,779 0x7ffff7578996
在new_allocator.h处的deallocate():110 0x416805
_M_deallocate()在STL_vector.h:174 0x416805
〜_Vector_base()在STL_vector.h:160 0x416805
〜在STL_vector.h处的vector():416 0x416805
_Destroy>()在STL_construct.h:93 0x416805
__destroy *>()在STL_construct.h:103 0x416805
_Destroy *>()在STL_construct.h:126 0x416805
_Destroy *,std::vector>()在STL_construct.h:151 0x416805
std::vector>,std::allocator>>::〜vector()在STL_vector.h:415 0x416805
位于my_class.cpp的TokenPassBasedDTW():2,203 0x40b237
my_class.cpp上的InitialVec_Token():2292 0x41318d
RUNMANAGER::TokenPassDecoder()位于my_class.cpp:2,485 0x413993
main()位于main.cpp:77 0x402774
@dasblinkenlight,这是个人资料吗?
程序概述:
std::vector< std::vector< double > > Matrix_A(10);
for(size_t i = 0; i < Matrix_A.size(); ++i){
Matrix_A[i].resize(20);
}
for(size_t i = 0; i < Matrix_A.size(); ++i){
for(size_t j = 0; j < Matrix_A[i].size(); ++j){
/*
* Here I read Matrix_A
*/
Matrix_A[i][j] = Val;
}
}
std::vector< double > Temp_Vector;
Temp_Vector = Matrix_A.back();
double Minimum_Value = *std::min_element(Temp_Vector.begin(), Temp_Vector.end());
Matrix_A.clear();
当我执行Matrix_A.clear()时发生错误;
最佳答案
free之所以崩溃,是因为您通过写超出分配的内存边界来破坏堆。我认为线
for(size_t j = 0; k < Matrix_A[i].size(); ++j){
应该读
for(size_t j = 0; j < Matrix_A[i].size(); ++j){
不确定
k
的值是多少08-05 05:39