Seite 1 von 1

ASSERT failure in QList<T>

Verfasst: 14. Mai 2008 00:15
von haldol
hallo,

ich bin am lernen und komme mit einem übungsprogramm nicht mehr wirklich weiter.
das programm lässt sich übersetzen, bringt aber beim ausführen einen speicherzugriffsfehler.
mit 'CONFIG += debug' kompiliert erhalte ich folgende meldung:

Code: Alles auswählen

ASSERT failure in QList<T>::at: "index out of range", file /usr/include/qt4/QtCore/qlist.h, line 393
http://nopaste.debianforum.de/8002
ich habe versucht das programm mit einem debugger zu durchlaufen (gdb und kdbg), erhalte damit aber auch nicht mehr information als die obige zeile. der debugger (kdbg) zeigt dabei nur das durlaufen des quelltextes in 'main.cpp' an.
ich benutze debian sid mit qt 4.4 aus den repositories. libqt4-dbg habe ich installiert.

der beispiel-quelltext, zu dem verwendeten buch startet ebenfalls nicht korrekt, so das ich mich daran nicht richtig orientieren kann.
wenn mir jemand ein wenig auf die sprünge helfen könnte, wäre ich sehr dankbar.

grüße
michael

Verfasst: 14. Mai 2008 00:17
von Volker
Wie die Meldung schon sagt, dürfte der Zugriffsindex den Du beim Zugriff auf ein Element der Liste gewählt hast, nicht innerhalb der Listengröße liegen. Also evtl. ist die Liste z.B. leer und du versuchst mit [1] auf ein Element zu zugreifen.

Verfasst: 14. Mai 2008 01:40
von haldol
hallo nochmal,

erstmal vielen dank für deine hilfe. nachdem ich nun nochmal die entsprechenden stellen durchgegangen bin, hab ich den fehler gefunden.
in 'adressbookmodel.cpp' muss in 'AdressBookModel::rowCount'

Code: Alles auswählen

return adressBook.count() - 2;
// statt: return adressBook.count();
stehen, dann funktionierts.

ich bin noch etwas irritiert was das debugging angeht. warum springt der debugger beim durchlaufen des quelltextes nicht in die entsprechenden dateien bzw. dort in die richtige zeile?

naja erstmal soweit
michael

Verfasst: 14. Mai 2008 07:35
von Volker
Tut er ja, aber der Fehler wird eben erst in QList ausgelöst. Normalerweise musst Du dann nur den Callstack rückwärts laufen um genauere Details zu finden. Allerdings ist das mit gdb net ganz so intuitiv. Es sei denn Du hast eine IDE die dir das etwas vereinfacht.

Verfasst: 14. Mai 2008 08:23
von solarix
warum springt der debugger beim durchlaufen des quelltextes nicht in die entsprechenden dateien bzw. dort in die richtige zeile?
Da gab's letztens schon ein Thread:
http://www.qtforum.de/forum/viewtopic.php?t=6594