Core dump bei push_back !
-
Hallo,
ich habe folgende Frage zur vector-Methode push_back:
Kann es sein, dass bei der (Re)Allokation von Speicherbereichen etwas schiefgeht?
Wenn ja, worauf/wann muss ich dabei achten
???Ich bekomme ständig einen core dump mitgeteilt, falls ich push_back aufrufe
(ich veruche dabei NICHT, nicht-existierende Objekte in den Vektor einzufügen, so viel steht fest).P.S.: ich arbeite unter Linux mit icc/g++ - Compilern
Vielen Dank für Eure Mithilfe!!
-
zeig mal einen _minimalen_ Code der deinen Fehler demonstriert. Hast du vielleicht vorher irgend einen Blödsinn mit dem Heap gemacht zB ein doppeltes delete?
Ansonsten könntest du mit duma oder valgrind versuchen den Fehler zu suchen.
-
Hallo Rüdiger,
genau das habe ich schon gemacht, valgrind spuckt u.a. Folgendes aus:
--8376-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting
--8376-- si_code=80; Faulting address: 0x0; sp: 0x402C87E00valgrind: the 'impossible' happened:
Killed by fatal signal
==8376== at 0x3802061A: unlinkBlock (m_mallocfree.c:189)
==8376== by 0x380209B6: vgPlain_arena_malloc (m_mallocfree.c:1055)
==8376== by 0x38034A5C: vgPlain_cli_malloc (replacemalloc_core.c:101)
==8376== by 0x38001AA0: vgMemCheck___builtin_new (mc_malloc_wrappers.c:182)
==8376== by 0x380369D1: do_client_request (scheduler.c:1158)
==8376== by 0x3803630A: vgPlain_scheduler (scheduler.c:869)
==8376== by 0x38047A36: thread_wrapper (syswrap-linux.c:87)
==8376== by 0x38047B0F: run_a_thread_NORETURN (syswrap-linux.c:120)sched status:
running_tid=1Thread 1: status = VgTs_Runnable
==8376==
at 0x4A193B6: operator new(unsigned long) (vg_replace_malloc.c:167)
==8376==
by 0x4BA557A: std::__default_alloc_template<true, 0>::allocate(unsigned long) (in /usr/lib64/libstdc++.so.5.0.3)
==8376==
by 0x414E9A: std::vector<matrix_member, std::allocator<matrix_member>>::_M_insert_aux(__gnu_cxx::__normal_iterator<matrix_member*, std::vector<matrix_member, std::allocator<matrix_member> > >, matrix_member const&)
==8376== by 0x40C0B7:
CGeneralizedCentering::computeRow(unsigned, CCenterSpace&, CMapping&)
==8376== by 0x4077EE:
CCentering::computeMatrix(CCenterSpace&, CMapping&)
==8376== by 0x40535C:
mainvector<matrix_member> ist der Vektor, in den ich einfügen möchte. "delete" habe ich nirgends benutzt. Hilft Dir das weiter?
-
Mir fällt auf dass es zwar um eine 64-Bit Anwendung geht
/usr/lib64/libstdc++.so.5.0.3
( Anfang unteres Drittel v. Trace);
new() aber mit unsigned long parameterisiert ist - wie gross ist denn das auf IA64?
und ganz oben im Trace ein NULL nebrn dem 64 Bit SP steht.
Mal ins Blaue gefragt: Ist da vielleicht irgendwo 32-Bit Code dazwischen?
Vielleicht in einer eigenen Lib?Grüsse
*this