Absturz bei vector.clear()



  • ne, das ist noch lange nicht zu groß. das sind 400.000 * 3 * 4 das sind ein paar MB.

    Also du wirst irgendwo über die Grenzen schreiben oder du schreibst direkt in den speicher des vectors rein oder sowas. Ansonsten kanns auch sein, dass der speicher der freigegeben wird nicht von dem thread/prozess/sonstwas erstellt wurde sondern von einem anderen. Gilbt aber nur, wenn du dlls oder threadds oder sowas verwendest



  • Aber im Grunde nutze ich nur push_back zum Hinzufügen eines Elements und zwischendurch ein clear(). Und wenn ich mit Hilfe von push_back etwas hinzufüge, kann es ja im Grunde keine Probleme geben?!



  • zeig doch mal code, wenns ncih zu viel is


  • Mod

    Das Problem könnte zum Beispiel auch dein Elementtyp sein, wenn dort irgendetwas unsauber ist - wie etwa bei fehlerhaftem Copy-ctor/operator



  • Er stürzt nur bei vector.clear ab! Ich wende zwar Algorithmen an zur Erstellung des Vectors, allerdigs nutze ich da nur push_back um Hinzufügen!
    Mit Quellcode müsste ich einiges zeigen. Ich habe auch viele Schleifen, aber das sind immer nur Dinge zum Auslesen.

    Wenn ich debugge stürzt er glaube ich ab, weil er ein falsch definiertes Ende oder Anfang hat?!



  • Der Destruktor der Elemente, die du hinzufügst, könnte blödsinn machen, oder aber der Copy-C'tor. ...

    Du bist sicher, das auf dem vector nur push_back und clear aufgerufen wird und nicht zufällich mal ein operator[]? Oder areitest du irgendwo mit Iteratoren? Weil irgendwie erscheint das ein wenig sinnlos etwas reinzutun und dann wieder zu löschen ohne jemals damit zu arbeiten.

    Ansonsten gibts in einigen wenigen Fällen ja auch so Sachen, as ein Projekt-Rebuild ganz merkwürdige Fehler beseitigt.


  • Mod

    wie stürzt es denn ab?
    welchen typ hat denn dein vector? wenn der element typ eine klasse ist, dann bitte auch mal die definition derselben + definition von copyctor, copy-op= und destruktor.



  • camper schrieb:

    wie stürzt es denn ab?
    welchen typ hat denn dein vector? wenn der element typ eine klasse ist, dann bitte auch mal die definition derselben + definition von copyctor, copy-op= und destruktor.

    Mein vector ist ein vector<Datensatz>

    Datensatz ist:
    struct Datensatz {
    	long timestamp;
    	vector<double> values;
    	vector<unsigned int> treffer;
    };
    

    Also vor dem Absturz kann ich auch problemlos noch mit push_back Werte hinzufügen! Und dann clear() -> Absturz! 😞



  • Wenn du einen Debugger zur Verfügung hast, dann mach mal einen Backtrace. So wie das aussieht, müsste es imho eigentlich gehen.



  • Was für Operationen wendest du denn auf den vector alle an? Nur push_back und auslesen? Oder löscht du irgendwo vielleicht ein paar der Datensätze?



  • wenn ich mit dem debugger tiefer reinschaue, stürz er wohl beim vector ab, weil er probleme mit dem anfang und ende hat und ich denke da liegt irgendwie der fehler. allerdings benutze ich NUR push_back() und clear(), sonst nichts. es kann eigentlich garnicht vorkommen, dass er sich irgendwas kaputt schreibt, weil ich ja nur die beiden operationen nutze. also keine ahnung 😞



  • Versuch mal den Code zu minimieren/eingrenzen. Schreib mal nur zweimal push_back und dann clear(), mal sehen ob er dann auch abstürzt, wenn ja trotzdem den kleinen Code dann mal posten, wenn nein zeig uns deinen ganzen Code 🙂



  • Es könnte durchaus sein, dass der Fehler mit dem vector direkt nichts zu tun hat. Ein ungültiger Zeigerzugriff (Arraygrenzen etc.) kann sich durchaus auch später, z.Bsp. bei clear(), bemerkbar machen.



  • Du pusht ja irgendwelche "Datensätze". Wie Baust du die denn zusammen? Die enthalten ja wiederum Vectoren. Machst du mit denen vielleicht versehentlich irgendetwas?



  • @helium: danke das ist noch ne gute Idee, vielleicht finde ich da was! ich werd mal schauen!


Anmelden zum Antworten