2009-07-26 6 views
17

Während mein Programm läuft bekomme ich diesen Fehler:Was die Bedeutung dieses C++ Fehler std :: length_error

terminate called after throwing an instance of 'std::length_error' 
    what(): basic_string::_S_create 
Abort trap 

Ich weiß, dass Sie nicht ohne den Code viel tun kann, aber ich denke, dass dieser Fehler ist zu tief im Code, um alles zu kopieren. Vielleicht kann ich es herausfinden, wenn ich verstehe, was dieser Fehler bedeutet. Ist dies ein Zeichen für ein Problem beim Lesen oder Schreiben an der falschen Speicheradresse?

Gibt es etwas, was ich tun kann, um mehr Informationen über das Problem von meinem Programm zu bekommen?

+0

Können Sie einen Teil des Codes dort veröffentlichen, wo Sie auf die Zeichenfolge zugreifen? –

+1

Die Zeichenfolge ist nicht das Problem. Nach ein paar kleinen Änderungen und dem Hinzufügen von Debug-Meldungen bekomme ich einen echten segfault;) – Janusz

+1

Zusätzlich zu der Antwort von Kevin: Vielleicht hast du einige Berechnungen durchgeführt, die zu einer negativen String-Länge führen würden? Da die Stringlänge (normalerweise) als vorzeichenloser Wert gespeichert wird, würde Ihr negativer Wert zu einem extrem großen positiven Wert führen, der meistens größer ist als std :: string :: max_size()! – mmmmmmmm

Antwort

20

Es bedeutet, dass Sie versucht haben, eine Zeichenfolge größer als Std :: string :: max_size() zu erstellen.

http://msdn.microsoft.com/en-us/library/as4axahk(VS.80).aspx

An exception of type length_error Class is thrown when an operation produces a string with a length greater than the maximum size.

+2

Könnte das auch bedeuten, dass meine Zeichenfolge nicht mehr im Speicher ist und ich zufällig Müll aus dem Speicher lese, bis die Zeichenfolge zu groß ist? – Janusz

+14

Sie könnten diese Situation versehentlich erstellen, indem Sie versuchen, eine Zeichenfolge der Größe -1 zu erstellen. String-Größen sind unsigniert, daher ist -1 die größte mögliche vorzeichenlose ganze Zahl. – MSalters

0

Dies ist ein Fehler im Debug-Modus mit VS2005. Wenn ich es in den Freigabemodus ändere, funktioniert alles.

Nun, die VC Debug-Laufzeit verursacht dies, das ist alles.

+4

Willkommen bei StackOverflow und vielen Dank für die Veröffentlichung. Bitte schauen Sie auf [Wie zu antworten] (http://stackoverflow.com/questions/how-to-answer). –

+0

Der Wechsel von Debug zu Release funktionierte auch für mich, aber in VS2008 64-Bit. Es stürzte ab, als der Debugger auf eine Zeile traf, die ein sehr großes Matrixobjekt erzeugte. Ich schätze, es wurde versucht, genügend Platz für die Anzeige der Matrix als String zu reservieren, was letztendlich zum Absturz führte. – partofthething

1

Ich weiß, das ist eine alte Frage, aber ich lief gerade in das gleiche Problem. Verwenden von Linux mit gcc.

Zerlegen der Funktion zeigte eine Menge Sprünge im Code, wo die Ausnahme geworfen wurde, die nicht da sein sollte. Am Ende hat ein Clean Build das Problem für mich gelöst.

Verwandte Themen