Was könnte die Ursache für die Rückkehr der Funktion zum Absturz? C++
So habe ich das Debuggen dieser Fehler für Stunden jetzt. Ich Schreibe ein Programm mit Ogre3d nur relevant, weil es wird nicht geladen, Symbole, damit es nicht lassen Sie mir den stack-trace, die Suche nach dem Standort der crash noch härter. Also, schreiben Sie, bevor ich Sie rufen eine spezielle Funktion auf, die ich drucken Sie "Start" dann habe ich die Funktion aufrufen und sofort, wenn ich drucken "Beenden". In der gesamten Funktion, die ich ausdrucken Buchstaben A-F, wo F ist gedruckt, direkt vor der Funktion gibt (eine Zeile über das Letzte '}') Die seltsame Sache ist, wenn der Absturz Auftritt, ist es nach dem " F " ausgedruckt, aber es gibt kein 'Stopp'. Bedeutet das, dass der Absturz passiert in zwischen irgendwo? Das einzige, was ich denken kann, ist etwas schief geht, während die Freigabe von einigen der Speicher während der Funktion. Ich hatte noch nie etwas so geschieht, ich werde immer überprüfen, um sicherzustellen, dass es schief geht, wo ich denke, dass es ist.
- Alle Arten von Dingen. Warum nicht zeigen Sie den entsprechenden code?
- Könnte alles sein-wenn Sie z.B. Durcheinander stack über vagabundierende Zeiger-aber es klingt nach bug, das sich per Destruktor aufgerufen wird. Versuchen Sie es zum reproduzieren des Problems in eine kleinstmögliche, aber vollständiges Programm. Poste den code (wenn der Prozess nicht aufdecken der Fehler). Cheers,
- Kann nicht sagen Sie nichts, wenn Sie nicht nach dem code.
- Den code gepostet habe schon viel mit kopieren/einfügen und weniger relevant. Aber ich glaube, dass ich das problem gefunden, wie man von den Antworten, die unten aufgeführten, sagte.
- Wenn Sie die Verwendung von stdio für die Verfolgung, wenn etwas passiert, dann denken Sie daran, rufen Sie
fflush()
jedes mal, wenn Sie ein Protokoll schreiben Nachricht
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meisten der Zeit, wenn etwas seltsam und un-verständlich geschieht, es ist da etwas anderes.
Konnte man einige dangling pointers im code (auch in einem Ort weit Weg von dieser Funktion), das auf einige random memory-Zellen.
Den Sie möglicherweise verwendet haben, so baumelnden Zeiger, und es könnte dazu geführt haben, in das überschreiben von Speicher Zellen, die Sie benötigen. Das Ergebnis dieser ist, dass Sie sich das Verhalten Ihres Programms, indem Sie einige Variablen definiert an anderer Stelle, einige Konstanten, oder sogar einige code!
Ich würde vorschlagen, Sie zum Debuggen Ihrer Anwendung mit etwas Werkzeug in der Lage, zu prüfen und Bericht fehlerhafte Speicherzugriffe, wie Valgrind.
Jedenfalls, wenn Sie sind in der Lage zu lokalisieren die Quelle der Absturz und schreiben Sie ein kleines Stück code, das wird Absturz hier posten-es könnte nur einen einfachen Fehler, die in Ihrer Funktion, obwohl es scheint unwahrscheinlich, von Ihrer Beschreibung.
Diese wahrscheinlich bedeutet, dass der Fehler passiert, wenn die Funktion zurückgibt, und einige Destruktor ausgelöst. Die Chancen sind Sie haben einige Destruktor versuchen, um Speicher freizugeben und Sie nicht besitzen, oder das schreiben über das Ende von etwas Puffer in einem Protokoll, etc.
Andere Möglichkeit, um sich bewusst sein, der kommen könnte, wenn Sie nicht die Spülung Sie die Ausgabe-stream. Es ist möglich, dass das "Stoppen" wird immer gedruckt, aber gepuffert werden, bevor man
stdout
. Stellen Sie sicher, zu überprüfen, denn wenn es das ist, was Los ist, wirst du auf dem Holzweg.Ich hatte ein ähnliches problem, und es stellte sich heraus, dass meine Funktion war nicht wieder alles, wenn die Signatur erwarteten Rückgabetyp von std::shared_ptr, auch wenn ich nicht mit der return-überall.
Die Funktion hat die folgende Signatur:
Ich hatte das gleiche problem und es stellte sich heraus, dass ich vergaß, meine init-Vektor vor dem anfügen neuer Elemente, die Fehler verursachen, wenn meine Funktion den Vergleich wurde der Vektor mit der anderen Liste.
Was ist verwirrend ist, dass ich mit Xcode und die app Abstürzen direkt nach dem "return 0" bei der undurchsichtigen Meldung "thread-13: signal SIGABRT". Jedoch, mithilfe von Visual Studio stattdessen zeigte mir die Linie, wo die index liegt außerhalb des Bereichs.