funktion mit qstring rueckgabe verursacht total crash?

Alles rund um die Programmierung mit Qt
Antworten
gary
Beiträge: 7
Registriert: 14. März 2010 18:52

funktion mit qstring rueckgabe verursacht total crash?

Beitrag 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
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

Vielleicht liegt das Problem auch in der getKrautName Funktion, von der wir aber keinen Code haben.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Jede Menge Code aber keine Debugger-Ausgabe? Warum sollte man da helfen?
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Re: funktion mit qstring rueckgabe verursacht total crash?

Beitrag 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
gary
Beiträge: 7
Registriert: 14. März 2010 18:52

Beitrag von gary »

ihr habt mir geholfen, danke
Antworten