std::deque::push_back crasht mit segfault



  • Hi,

    ich versuche mich gerade an einem Befunge-93 Interpreter.
    Soweit so gut, und auf einmal gibt es einen Segfault beim push_back() der deque meines std::stack s.

    Hat jemand eine Idee, woran es liegen könnte? Hier crasht es:

    push_back(const value_type& __x)
          {
    	if (this->_M_impl._M_finish._M_cur
    	    != this->_M_impl._M_finish._M_last - 1)
    	  {
    	    this->_M_impl.construct(this->_M_impl._M_finish._M_cur, __x);///<- Hier!
    

    Wenn Code benötigt wird, liefere ich gerne die zusammenkopierte Version auf Ideone.com. Ich stelle sie noch nicht bereit, weil ich sicher bin, dass der Code nicht helfen wird, ich würde erstmal Vorschläge haben wollen woran es liegen könnte, vielleicht kommt mir dann ein Gedankenblitz.

    MfG und danke im Voraus.

    P.S.: Ich kann mir nicht im geringsten Vorstellen, wie deque::push_back streiken könnte... 😮



  • Copy Ctor?



  • Kellerautomat schrieb:

    Copy Ctor?

    Die zu haltenden Elemente sind unsigned long long s 😃
    Vergessen zu erwähnen 😃



  • zerschossener heap? valgrind und debugger können helfen



  • Zeig die Codestelle , wo du push_back aufrufst.



  • Sone schrieb:

    Wenn Code benötigt wird, liefere ich gerne die zusammenkopierte Version auf Ideone.com. Ich stelle sie noch nicht bereit, weil ich sicher bin, dass der Code nicht helfen wird

    Anders gesagt, du bist dir absolut sicher, dass der Fehler nicht bei dir sondern bei der Bibliothek liegt? Dann viel Spaß beim allein weitersuchen.
    Mein erster Reflex war, dich auf den zweiten Link in meiner Signatur hinzuweisen, aber wenn du uns absichtlich keine Infos liefern willst, warum sollten wir dir dann noch helfen wollen?

    So allmählich müsstest du doch wissen, wies hier abläuft oder nicht?

    PS: wenn du schon ins push_back reindebuggst, warum nicht auch noch ins construct?



  • pumuckl schrieb:

    Sone schrieb:

    Wenn Code benötigt wird, liefere ich gerne die zusammenkopierte Version auf Ideone.com. Ich stelle sie noch nicht bereit, weil ich sicher bin, dass der Code nicht helfen wird

    Anders gesagt, du bist dir absolut sicher, dass der Fehler nicht bei dir sondern bei der Bibliothek liegt? Dann viel Spaß beim allein weitersuchen.

    🙂
    http://ideone.com/L0uTV
    Der Segfault beginnt bei Z. 150 ( push ).

    Deklaration des stack s ist weiter oben.



  • Unglaublich! Ich glaube ich hab den Fehler!
    Tatsächlich ist die Größe des Stacks beim Aufruf 0. Allerdings hatte ich das ausgeschlossen, weil ich dachte, dass zum Zeitpunkt des Aufrufs von push_back das top() vom Stack und damit das back() der deque sonst etwas geworfen hätten (da das top() vorher ausgewertet und damit aufgerufen wurde).

    Ich seh mal weiter, danke schon mal.



  • Und wenn du stack.top() vorher in eine Variable rettest, bevor du sie pusht?



  • LOL, es war ein semantischer Fehler meines Interpreters - der ':' Befehl bedeutet bei Befunge, dass wen der Stack leer ist, Zwei Nullen reingepusht werden (welchen Sinn auch immer das haben mag).

    @fghfgh: Probier ich gleich aus.



  • fghfgh schrieb:

    Und wenn du stack.top() vorher in eine Variable rettest, bevor du sie pusht?

    Jo, dann crasht er bei der Initialisierung, thx 🙂

    Komisch ist aber, dass er nix wirft 😕



  • war auch meine erste Intuition, dass der Stack leer sein könnte. Danach dachte ich mir, dass du das sicher gecheckt hast und hab mir schon überlgt, ob es irgendwelche Möglichkeiten gibt, top() durch das push() zu invalidieren(sowas geht bei einem vektor zum Beispiel, wenn die Implementation des vektors einen kleinen Fehler hat: vektor.push_back(vektor.back()) ). Gut, dass es in diesem Fall keinen Fehler in der stl gab 😉


Anmelden zum Antworten