我将尝试在不提供太多源代码的情况下提出这个问题,因为所有相关的位都加起来。关键(我认为?)涉及的对象是
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);
boost :: function mf1用作最小化例程(o2scl::ool_mmin_spg)的回调函数,但我不认为我遇到的问题是特定的。代码运行时调用ool_mmin_spg.mmin()函数,该函数使用mf1作为回调并且似乎运行没有错误。然后我得到了这个可爱的消息
*检测到glibc * ./test:损坏的双链表:0x0000000001e9fb20 ***
后跟回溯和内存映射。回溯的相关行似乎是
#7 0x000000000041d32a in boost :: detail :: function :: functor_manager,o2scl :: ovector_const_subvector_tlate&gt;,MSMTFormation&gt ;, unsigned long,o2scl :: ovector_base_tlate const&amp;,double&amp;,dmect :: MSMTModel,o2scl :: ovector_const_subvector_tlate &gt;&amp;&gt;,boost :: _ bi :: list5,o2scl :: ovector_const_subvector_tlate&gt;,MSMTFormation&gt; &gt;,boost :: arg&lt; 1&gt;,boost :: arg&lt; 2&gt;,boost :: arg&lt; 3&gt ;, boost :: arg&lt; 4&gt; &GT; &GT; &gt; :: manage(in_buffer =,out_buffer = warning :(内部错误:在psymtab中读取pc 0x41d270,但在symtab中没有。)
我推断出从boost :: function中释放内存存在一个问题,但除此之外我失去了。有没有关于尝试调试glibc“损坏的双链表”错误的指针?我在谷歌上发现了一些参考文献但似乎都解决了非常具体的问题。如果需要更详细的代码剪辑,请告诉我,谢谢您的时间!
答案 0 :(得分:4)
通过valgrind运行程序。当内存被破坏时,它会给你一个堆栈跟踪(以及与该内存的历史相对应的堆栈跟踪,例如,它在哪里被创建,或者如果被删除,它被销毁的地方)。
答案 1 :(得分:0)
我是O2scl作家,直到现在才看到这篇文章。我查看spg minimizer有点只是为了确保,我没有看到任何明显的错误,但我承认我从未尝试过以这种方式一起使用boost :: function和o2scl。我会继续看一些事情,但如果你搞清楚了,请告诉我。