Seite 1 von 1

funktion mit qstring rueckgabe verursacht total crash?

Verfasst: 1. April 2010 01:26
von gary
Also hallo,

ich hab hier einen Konstruktor der Klasse KGarten. Diesem wird ein Pointer Held *g uebergeben:

Code: Alles auswählen

KGarten::KGarten(Held *g) {

    gart = g;
    setGeometry(70,70,460,230);

    glayout = new QGridLayout();
    big = new QHBoxLayout(this);


    vL = new QVBoxLayout();
    big->addLayout(glayout,3);
    big->addLayout(vL,1);

///////////////////////////
    cl = new QPushButton("Genug gepflanzt!",this);

    for (krautID i=NN;i<=MAX;i=krautID(i+1)) {

        kL[i] = new QHBoxLayout();
        kraut[i] = new QLabel(gart->getKrautName(i),this);
        krautZahl[i] = new QLCDNumber(gart->getKrautZahl(i),this);

        vL->addLayout(kL[i]);
        kL[i]->addWidget(kraut[i]);
        kL[i]->addWidget(krautZahl[i]);
    }
    vL->addWidget(cl);
//////////////////////////////7

    fokusx = fokusy = 0;
    for(int i=0;i<REIHEN;i++) {
        for(int j=0;j<SPALTEN;j++) {
            topf[i][j] = new KTopf(gart->getKrautFarbe(gart->getGartenKraut(i,j)),this);
            glayout->addWidget(topf[i][j],i,j);
        }
    }

    big->activate();

}
Dieses Programm laesst sich einwandfrei kompilieren. Beim Ausfuehren zeigt mir der Qt-Creator Folgendes an:

ASSERT: "i >= 0" in file ../../include/QtCore/../../src/corelib/tools/qstring.h, line 871

ich hab hier mal noch die Zeilen 860 bis 880 ungefaehr rauskopiert.

Code: Alles auswählen

...
inline QString::QString() : d(&shared_null) { d->ref.ref(); }
inline QString::~QString() { if (!d->ref.deref()) free(d); }
inline void QString::reserve(int asize) { if (d->ref != 1 || asize > d->alloc) realloc(asize); d->capacity = 1;}
inline QString &QString::setUtf16(const ushort *autf16, int asize)
{ return setUnicode(reinterpret_cast<const QChar *>(autf16), asize); }
inline QCharRef QString::operator[](int i)
{ Q_ASSERT(i >= 0); return QCharRef(*this, i); }
inline QCharRef QString::operator[](uint i)
{ return QCharRef(*this, i); }
inline QString::iterator QString::begin()
{ detach(); return reinterpret_cast<QChar*>(d->data); }
inline QString::const_iterator QString::begin() const
{ return reinterpret_cast<const QChar*>(d->data); }
...
Das Programm funktioniert so wie es soll, wenn der Bereich zwischen den ////// - Zeilen nicht implementiert ist (mit winzigen Änderungen wegen den Layouts).
Ich vermute, dass der Fehler in dieser Zeile liegt:

kraut = new QLabel(gart->getKrautName(i),this);

mit QString getKrautName(krautID i);
krautID ist ein 'enum'. Ich hatte eigentlich ein Test-Programm geschrieben, um zu sehen, ob das funktioniert, und es hat funktioniert. Mach ich etwas anderes grundsätzlich falsch?

Vielen Dank
Gary

/edit by Christian81 - Code-Tags korrigiert

Verfasst: 1. April 2010 07:35
von CaptnChaos
Vielleicht liegt das Problem auch in der getKrautName Funktion, von der wir aber keinen Code haben.

Verfasst: 1. April 2010 10:16
von upsala
Jede Menge Code aber keine Debugger-Ausgabe? Warum sollte man da helfen?

Re: funktion mit qstring rueckgabe verursacht total crash?

Verfasst: 1. April 2010 11:28
von Troll.Soft
gary hat geschrieben:Das Programm funktioniert so wie es soll, wenn der Bereich zwischen den ////// - Zeilen nicht implementiert ist (mit winzigen Änderungen wegen den Layouts).
Ich vermute, dass der Fehler in dieser Zeile liegt:
Dann kommentier doch genau diese Zeile aus und Du weißt Bescheid.
Oder Du schrumpfst Dein Programm super stark ein. Der Fehler tritt noch auf und Du kannst nun den ganzen Code posten.
tschüß
TrollSoft

Verfasst: 1. April 2010 13:10
von gary
ihr habt mir geholfen, danke