Seite 1 von 1

QT im Debug Modus stürtzt mit einem ASSERT ab (QString) !?

Verfasst: 4. Januar 2006 17:18
von john
Hallo Leute,

ich würde gerne mein Programm mit gdb debugen. Aber sobald ich die Debug-Version erstelle, dann stürtzt das Programm mit follgender Fehlermeldung ab:
ASSERT: "i >= 0 && i < size()" in file C:/Qt/4.1.0sh/include/QtCore/../../src/corelib/tools/qstring.h, line 541
Natürlich habe ich versucht den Fehler mit gdb nachzuvollziehen. Leider kann ich keinen logischen Fehler erkennen. Im Release-Modus klappt auch alles so wie es soll.

Ich verwende QT 4.1.0 und MinGw 5.0

Es ist nur ein einfaches zeichenweises kopieren eines Strings.
Hier mal der Code:

Code: Alles auswählen

int i;
QChar c;
QString temp, msg;

temp = "";
msg = "irgendwas";

for(i = 0; i < msg.length(); i++){
	c = msg.at(i);            
	temp += c;
}
ich habe diese Schleife im gdb durchlaufen. Es kommt zu diesen ASSERT, wenn das letzte Zeichen von msg gelesen wird (in diesem Falle beim 's'). Aber das kann doch nicht sein !? (das 'a' wird noch gelesen und in temp angefügt, aber beim 's' stürzt es mit der ASSERT-Meldung ab.

Was bedeutet dieser ASSERT in qstring.h? Und wieso nur im Debug-Modus?

Vielen Dank schonmal und viele Grüße
Ciao John

Verfasst: 4. Januar 2006 18:05
von Christian81
Also bei mir passiert das nicht...
Allerdings sollte da wirklich kein assert kommen da QString::length() auf QString::size() zugreift, also i nie grösser als size() werden kann. Eventuell wird i aus Versehen verändert? Schau mal was i für Werte annimmt.

Einen QString würde ich trotzdem anders kopieren :)

Verfasst: 5. Januar 2006 13:24
von john
Hallo Christian81,

vielen Dank für deine Antwort und für's ausprobieren. Inzwischen hat sich das Problem von selbst gelöst. Ich habe nichts am Code geändert, außer die Datei die mit "QTextStream instream(&datei)" in den QString "msg" eingelesen wurde. Vermutlich war da ein "unsichtbares Sonderzeichen" ...?
Einen QString würde ich trotzdem anders kopieren :D
Alles klar! :lol:

Gruß Ciao John