C++ &引用;“损坏的双链接列表”;关于boost::function free()

C++ &引用;“损坏的双链接列表”;关于boost::function free(),c++,glibc,boost-function,C++,Glibc,Boost Function,我将尝试在不提供太多源代码的情况下问这个问题,因为所有相关的位加起来就是一堆。关键(我想?)涉及的对象是 using namespace o2scl; typedef MSMTModel<TASensor,PosModel,target2d,ovector,ovector_const_subvector> TA_MSMTModel; typedef MPC_funct_mfptr<MSMT_InitialState,TA_MSMTModel,MSMTFormation>

我将尝试在不提供太多源代码的情况下问这个问题,因为所有相关的位加起来就是一堆。关键(我想?)涉及的对象是

using namespace o2scl;

typedef MSMTModel<TASensor,PosModel,target2d,ovector,ovector_const_subvector> TA_MSMTModel;
typedef MPC_funct_mfptr<MSMT_InitialState,TA_MSMTModel,MSMTFormation> MPC_TAFormation_mfptr;
typedef boost::function<int (size_t, const ovector_base&, double&, TA_MSMTModel&)> TA_mfunct;

TA_mfunct mf1 = boost::bind(&MPC_TAFormation_mfptr::mfn, f1, _1, _2, _3, _4);
使用名称空间o2scl;
typedef MSMTModel TA_MSMTModel;
typedef MPC_function_mfptr MPC_TAFormation_mfptr;
typedef boost::函数TA_mfunt;
最惠国待遇,f1,_1,_2,_3,_4);
函数mf1被用作最小化例程()的回调函数,但我不认为我遇到的问题与此有关。代码通过调用ool_mmin_spg.mmin()函数运行,该函数使用mf1作为回调函数,并且运行时似乎没有错误。然后我收到了这个可爱的消息

*检测到glibc*/test:损坏的双链接列表:0x0000000001e9fb20***

然后是回溯和内存映射。回溯的相关行似乎是


#7 0x0000000000412A在boost::detail::function::functor\u manager,o2scl::ovector\u const\u subvector\u tlate>,MSMTFormation>,无符号长,o2scl::ovector\u base\u tlate const&,double&,dmect::MSMTModel,o2scl::ovector\u const\u subvector\u tlate>,boost:\u bi::list5,o2scl::ovector\u const\u subvector\u subvector\u tlate>,MSMTFormation>,boost::arg>,boost::arg,boost::arg,boost::arg>>>::manage(in_buffer=,out_buffer=警告:(内部错误:pc 0x41d270在读入psymtab中,但不在symtab中。)



我推断从boost::函数中释放内存时出现问题,但除此之外,我丢失了。是否有任何关于调试glibc“损坏的双链接列表”的建议错误?我在google上找到了一些参考资料,但似乎都解决了非常具体的问题。如果需要更详细的代码剪接,请告诉我,谢谢您的时间!

通过valgrind运行程序。当内存损坏时,这将为您提供堆栈跟踪(以及对应于该内存历史记录的堆栈跟踪,例如创建该内存的位置,或者如果删除该内存,则销毁该内存的位置)。

通过valgrind运行该程序。当内存损坏时,这将为您提供堆栈跟踪(以及对应于该内存段历史记录的堆栈跟踪,例如创建该内存段的位置,或者如果删除该内存段,则销毁该内存段的位置).

我是O2scl的作者,直到现在才看到这篇文章。我查看了一下spg最小值,只是为了确定,我没有看到任何明显的错误,但我承认我从未尝试过以这种方式使用boost::function和O2scl。我会继续仔细检查一下,但如果你发现了问题,请告诉我。

我是O2scl作者,直到现在才看到这篇文章。我查看了一下spg最小值,只是为了确定,我没有看到任何明显的错误,但我承认我从未尝试过以这种方式同时使用boost::function和o2scl。我会继续查看一些内容,但如果您发现了问题,请告诉我。

谢谢您的评论!我解决了问题问题,这不是o2scl的问题,而是boost函数引用的对象在需要之前超出范围的问题。感谢您的评论!我解决了问题,这不是o2scl的问题,而是boost函数引用的对象在需要之前超出范围的问题。