Seite 1 von 1

kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 18:24
von feldmaus
Guten Abend Leute,

mein kdevelop stürzt ab bei einer bestimmten Stelle in meinem Code. Die Fehlermeldung lautet:

Code: Alles auswählen

ASSERT failure in QVector<T>::operator[]: "index out of range", file /usr/include/qt4/QtCore/qvector.h, line 347
Ich habe ein struct,

Code: Alles auswählen

struct exprCollect {
    QStringList expInBrace;
    QStringList expOutsideBrace;
    QVector<bool> encounterBrace;
    int possiMultiply;//possibility multiplier, because of words in brackets
};
welches dann in einen Vector kommt,

Code: Alles auswählen

    QVector<exprCollect> vect(0);
Der Vector hat also zu Anfang keine Elemente, ist also 0 groß.

Sobald ich diesen Vector mit "exprCollect" Elementen füttere, bricht kdevelop zusammen,

Code: Alles auswählen

            vect[nExpr].expOutsideBrace << "";
            vect[nExpr].expInBrace << braceStr.simplified();
            vect[nExpr].encounterBrace << true;
"nExpr" ist vom Typ Int und zu Anfang 0 und wird dann inkrementiert bei jeden Schleifendurchgang. "braceStr" ist vom Typ String. Eine Idee was ich falsch mache?

Grüße Markus

Re: kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 20:04
von upsala
Was hat das mit KDevelop zu tun? Oder programmierst du KDevelop um?

Wenn ein QVector eine größe von 0 hat, dann hat man auch keine Elemente auf die man zugreifen kann. Wenn du Elemente hinzufügen willst, dann mach dies mit append, push_back, push_front, prepend oder <<. Oder du legst deinen QVector gleich groß genug an.

Re: kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 20:23
von feldmaus
Ich programmiere an Parley rum und nutze kdevelop als IDE. Irgendwie scheint aber kdevelop abzustürzen an diesem Punkt.

Ich nutze ja den Operator << um neue Elemente hinzuzufügen. Mit append habe ich es jetzt auch mal probiert, aber der Fehler bleibt.

Re: kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 20:40
von Christian81
Sorry aber 'vect[nExpr]' ist kein 'append()' und kein 'operator()<<' sondern ein Index-Zugriff auf ein Element welches nicht gibt -> C++ Grundlagen.

Re: kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 20:53
von feldmaus
@Christian81
Wofür entschuldigst Du Dich? :D

vect[nExpr] ist ein Zugriff auf ein Element vom Typ exprCollect und dieses hat unter anderem Elemente vom Typ QStringList auf die ich dann versuche den Operator << anzuwenden.

Re: kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 20:59
von upsala
Außerdem würde mich mal interessieren, wie sich der Absturtz von KDevelop bemerkbar macht.

Re: kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 21:01
von upsala
Ist das Element vect[nExpr] vorhanden oder nicht? Wie groß ist QVector zum Zeitpunkt, wenn diese Anweisung ausgeführt wird?

Re: kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 21:07
von feldmaus
@upsala
Also kdevelop zeigt mir nicht mehr die letzten Werte von den Variablen an, der Debug Modus wird einfach beendet, ich kann also gar nicht sehen wo das Problem wirklich liegt. Manchmal stürzt er auch schon ab bevor er die Zeile mit vect[nExpr] ausführt, aber mit gleicher Fehlermeldung. kdevelop bleibt aber auf meinem Bildschirm erhalten.

Re: kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 21:24
von feldmaus
Ist denn meine Vorgehensweise mit struct in dem Vector richtig? Laut google scheint es korrekt zun sein und mein Buch für Informatiker(Basics und mehr) gibt da auch keine konkreten Infos.

Re: kdevelop stürtzt ab wegen zu großem QVector

Verfasst: 13. September 2011 21:54
von franzf
vect[nExpr] ist ein Zugriff auf ein Element vom Typ exprCollect und dieses hat unter anderem Elemente vom Typ QStringList auf die ich dann versuche den Operator << anzuwenden.
ja, aber trotzdem ist dein vect[] noch immer leer! Du sollst erst vect füllen (append, operator<<()), DANACH kannst du auf die Elemente in vect zugreifen

Und außerdem stürzt nicht kdevelop ab, sondern dein Programm! Nur weil du in deinem Programm über die Grenzen des Vectors zugreifst, stürzt kdevelop nicht ab.