Speicherzugriffsfehler durch QList



  • Hallo alle miteinander,

    ich arbeite derzeit an einem QT-Programm und bin am verzweifeln.

    Ich habe eine QList mit Elementen des Typs song, ein Struct den ich definiert habe.

    Hier der Code:

    struct song
    {
        QLabel *title;
        int *position;
        int *counter;
        bool *jumped;
    };
    

    QList:

    QList<song> *songlist;
    

    In meinem Prog greife initialisiere ich die QList und greife auf sie zu:

    void favs::initPlayList(int count)
    {
         for(int i=0;i<count;i++)
         {
             song tmpSong;
             QString tmpString = QString::number(i);
    
             tmpSong.title    = new QLabel(tmpString);
             tmpSong.position = (int*)i;
             tmpSong.jumped   = false;
             tmpSong.counter  = 0;
    
             songlist->append(tmpSong);
         }
    }
    

    Zugriff:

    void favs::fillGrid()
    {
         for(int i=0;i<songlist->size();i++)
         {
             playlistLayout->addWidget(new QLabel(QString::number(i)),i,0);
             playlistLayout->addWidget(songlist->at(i).title,i,1);
    
             QString tmpString = "";
             if(songlist->at(i).jumped)
             {
                 tmpString = tr("jumped");
             }
             else
             {
                 tmpString = tr("played");
             }
    
             playlistLayout->addWidget(new QLabel(tmpString),i,2);
         }
    }
    

    So, und durch den letzten Code-Abschnitt (Zugriff) wird eine Speicherzugriffmeldung ausgegeben (beim Programmstart, der diese Funktion ausführt).
    Fehler folgender Art:

    Die Anweisung in "0x004094be" verweist auf Speicher in "0x00000000". Der Vorgang "read" konnte nicht auf den Speicher durchgeführt werden.
    

    Wenn mir jemand eine Idee geben könnte, wo da was schiefläuft, wäre ich dafür sehr dankbar.

    Danke im Voraus,
    Ciao,

    Prof. MAAD



  • ich sehe nirgends eine Anweisung, die songlist (ist ein Pointer) auf einen gültigen Speicherbereich verweisen lässt.
    (btw, deine Verwendung von Pointern sieht überhaupt etwas .hmm. seltsam aus)



  • Ok, danke für den Hinweis.

    Ich habe jetzt in den Konstruktor folgende Zeile aufgenommen:

    songlist = new QList<song>;
    

    Tut mir leid, weis selber nicht, warum ich daran nicht gedacht habe.

    So, nun ist der ungültige Speicherbereich "0x00000004".

    Wenn noch jemand ne Idee hat, immer her damit!

    Danke im Voraus,

    Ciao,

    Prof. MAAD



  • Ok, Problem gelöst.

    Der Fehler war genauso simpel wie dumm:

    Ich habe auf Elemente des QGridLayouts zugegriffen, bevor ich es initialisiert hatte:

    playlistLayout->addWidget(new QLabel(QString::number(i)),i,0);
    .
    .
    .
    playlistLayout = new QGridLayout();
    

    Tut mir Leid, nächstes mal schalte ich die Rübe ein.

    Ciao und Danke,

    Prof. MAAD


Anmelden zum Antworten