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: 0x402C87E00

    valgrind: 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=1

    Thread 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:
    main

    vector<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


Anmelden zum Antworten