Closed. This question is not reproducible or was caused by typos。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

6年前关闭。



Improve this question




我有一个在ubuntu 13.10上运行的c++程序。
我随机遇到错误free(): invalid next size (fast)
搜索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,这是个人资料吗?

    程序概述:
    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