Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich werde versuchen, diese Frage zu stellen, ohne zu viel Quellcode zu liefern, da alle relevanten Bits zu einem Bündel addieren. Der Schlüssel (ich glaube?) Objekte beteiligt sind

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

die boost :: Funktion MF1 wird als Callback-Funktion für eine Minimierungsroutine verwendet ( o2scl :: ool_mmin_spg ), aber ich glaube nicht, das Problem, das ich habe, ist spezifisch für die. Der Code wird mit den Aufrufen an die ool_mmin_spg.mmin () Funktion, die Verwendung von MF1 als Callback macht und scheint ohne Fehler auszuführen. Dann habe ich diese schöne Nachricht erhalten

* glibc erkannt * ./test: beschädigt doppelt verkettete Liste: 0x0000000001e9fb20 ***

, gefolgt von einem Backtrace und Speicherkarte. Die entsprechende Linie der Backtrace zu sein scheint


# 7 0x000000000041d32a in boost :: Details :: Funktion :: functor_manager, o2scl :: ovector_const_subvector_tlate>, MSMTFormation>, unsigned long, o2scl :: ovector_base_tlate konst &, double &, dmect :: MSMTModel, o2scl :: ovector_const_subvector_tlate> &> kurbeln, :: _ bi :: list5, o2scl :: ovector_const_subvector_tlate>, MSMTFormation>> boost :: arg <1>, boost :: arg <2>, boost :: arg <3>, boost :: arg <4> >>> :: verwalten (In_Buffer =, out_buffer = Warnung: (Interner Fehler:. pc 0x41d270 in in psymtab lesen, aber nicht in symtab)


ich ableiten, dass es ein Problem gibt Speicher aus der boost :: Funktion zu befreien, aber anders als das bin ich verloren. Gibt es irgendwelche Hinweise auf Debug-glibc „beschädigte doppelt verknüpften Liste“ Fehler versuchen? Ich habe ein paar Verweise auf Google gefunden, aber alle haben schien sehr spezifische Probleme zu lösen. Bitte lassen Sie mich wissen, wenn ausführlichere Code snips und vielen Dank für Ihre Zeit, die erforderlich ist!

War es hilfreich?

Lösung

Starten Sie das Programm durch valgrind. Das wird Sie einen Stack-Trace geben, wenn der Speicher (sowie einen Stack-Trace entsprechend der Geschichte dieses Stück Erinnerung z. B. in dem es erstellt wurde, oder, wenn es gelöscht wurde, wo es zerstört wurde) beschädigt.

Andere Tipps

Ich bin der O2scl Schriftsteller und nicht diesen Beitrag sehen, bis jetzt. Ich schaute über den spg minimizer nur ein bisschen sicher zu machen, und ich habe nichts eindeutig falsch, aber ich gebe zu, ich habe noch nie auf diese Weise mit boost :: function versucht und o2scl zusammen. Ich werde auch weiterhin Dinge über etwas sehen, aber lassen Sie mich wissen, wenn Sie Dinge herauszufinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top