2009-10-01 7 views
0

모든 관련 비트가 한 묶음으로 합쳐지기 때문에 너무 많은 소스 코드를 제공하지 않고이 질문을하려고합니다. 관련 개체의 핵심은 (내가 생각하세요?)이다boost :: function에서 "corrupted double-linked list"를 참조하십시오.

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); 

부스트 :: 기능 MF1가 최소화 루틴 (o2scl::ool_mmin_spg)에 대한 콜백 함수로 사용하지만 난 데 문제가 특정 생각하지 않습니다 그. 코드는 mf1을 콜백으로 사용하고 오류없이 실행되는 것으로 보이는 ool_mmin_spg.mmin() 함수를 호출하여 실행됩니다. 손상된 이중 연결리스트 : 0x0000000001e9fb20 ***

백 트레이스 및 메모리 맵 다음에 그 때 나는

* glibc에 감지이 아름다운 메시지 * ./test를 얻을. 역 추적의 해당 줄 부스트에서


# 7 0x000000000041d32a :: 자세히 :: 기능 :: functor_manager 될 것으로 보인다 o2scl :: ovector_const_subvector_tlate>, MSMTFormation>, 부호 o2scl :: const를 & ovector_base_tlate, 긴, & 두 번 dmect :: MSMTModel이 o2scl :: ovector_const_subvector_tlate> &> :: _ 바이 :: list5을 강화, o2scl :: ovector_const_subvector_tlate>, MSMTFormation가>> :: 향상 arg를 < 1>, 부스트 : arg를 < 2> boost :: arg < 3>, boost :: arg < 4 :>> :: manage (in_buffer =, out_buffer = 경고 : 내부 오류 : psymtab에서 읽은 pc 0x41d270, symtab에서는 읽지 않음)


나는 boost :: function에서 메모리를 확보하는 데 문제가 있다는 것을 추론하지만, 잃어버린 것 이외에는 추측합니다. glibc "손상된 이중 연결 목록"오류를 디버그하려고 할 때 어떤 지침이 있습니까? Google에서 몇 가지 참조를 찾았지만 모두 매우 구체적인 문제를 해결하는 것처럼 보였습니다. 더 자세한 코드 스 니펫이 필요하며 시간 내 주셔서 감사합니다.

답변

4

valgrind를 통해 프로그램을 실행하십시오. 그러면 메모리가 손상되었을 때 스택 트레이스가 생깁니다 (예를 들어 스택이 생성 된 위치, 삭제 된 경우 삭제 된 위치 등 해당 메모리의 기록에 해당하는 스택 추적).

0

나는 O2scl 작가이며 지금까지이 게시물을 보지 못했습니다. 나는 SPG 최소화기를 약간만 살펴 보았고 확실하게 잘못된 것을 보지 못했다. 그러나 나는 boost :: function과 o2scl을 함께 사용해서 시도한 적이 없다는 것을 인정한다. 조금이라도 계속해서 보일 것입니다.하지만 사물을 알아 내면 알려주세요.

+0

댓글을 주셔서 감사합니다. 문제를 해결했는데 o2scl에는 문제가되지 않았지만 부스트 기능이 필요하기 전에 범위를 벗어나는 것을 참조하는 개체가있었습니다. – HazyBlueDot