Stack Überlauf



  • Hallo,
    seit kurzem bekomme ich eine Fehlermeldung, wenn ich ein Fenster schließe:
    "Stack Überlauf"
    Ich habe den Fehler versucht zu finden, aber er scheint nicht in meinem eigenen Quellcode auf zu treten, da, wenn ich Debugge irgendwann in irgendwelchen SystemDateien mit imho Delphi-Anweisungen lande und dort tritt diese Meldung auf.

    Stack überlauf kann ich schon ungefähr einorden, aber welcher Stack läuft denn da über. Wie kann ich das genauer Debuggen?



  • Hallo

    Ich bin mir sicher, das die eigentliche Ursache trotzdem in deinem Quellcode ist, auch wenn der vermeintliche konkrete Auslöser der Fehlermeldung woanders liegt.
    Stack-Überlauf bezieht sich normalerweise auf den Speicherbereich des statischen Stacks, der im Gegensatz zum dynamischen Heap sehr klein ist. Entweder rufst du viel zu viele Funktionen ineinander auf (z.B. bei (ungewollter) Rekursion), oder du reservierst viel zu große bzw. zu viele statische Variablen (z.B. große nichtdynamische C-Arrays).
    Mehr können wir dazu ohne weiteren relevanten Quellcode nicht sagen.

    bis bald
    akari



  • akari schrieb:

    Entweder rufst du viel zu viele Funktionen ineinander auf (z.B. bei (ungewollter) Rekursion), oder du reservierst viel zu große bzw. zu viele statische Variablen (z.B. große nichtdynamische C-Arrays).

    Wie kann man das denn am besten Debuggen. Oder worauf sollte man achten?



  • Hallo

    Reduzier erstmal deinen Quellcode solange, bis der Fehler nicht mehr auftaucht (auskommentieren). Dann schaltest du Zeile für Zeile wieder ein, bis der Fehler wieder erscheint. Danach schaust du dir erstmal an, ob dort schon die beiden genannten Punkte zu erkennen sind. Ansonsten weiterhin Breakpoints setzen und Programmablauf verfolgen. Man kann sich mit dem Debugger auf den Stack anschauen.

    bis bald
    akari



  • akari schrieb:

    Man kann sich mit dem Debugger auf den Stack anschauen.

    Dort würde ich anfangen; das ist üblicherweise der schnellste Weg zum Ziel.



  • audacia schrieb:

    akari schrieb:

    Man kann sich mit dem Debugger auf den Stack anschauen.

    Dort würde ich anfangen; das ist üblicherweise der schnellste Weg zum Ziel.

    Meint ihr den Aufruf Stack? Wenn ja, den hab ich mir schon angeschaut, da find ich nichts ungewöhnliches.
    Wenn Nein, dann: Wo finde ich den Stack? 😉 Bin grad ein bisschen am Verzweifeln



  • Habe meinen Fehler gefunden
    Hatte in

    void __fastcall Tauswertung::FormClose(TObject *Sender, TCloseAction &Action)
    {
    }
    

    noch ein

    this->Close();
    

    stehen. Das klappt natürlich nicht 😉

    Mich würde trotzdem interessieren, wo ich den Stack finde!



  • Ansicht|Debug-Fenster|Aufruf-Stack


Log in to reply