Seite 1 von 1

Segmentation fault bei QList::isEmpty()

Verfasst: 3. April 2014 15:19
von Nik94
Hallo zusammen,
ich habe in meinem Programm das Problem, dass ich bei dem Aufruf dwer Funktion isEmpty bzw. size() eines QList-Objektes immer ein Segmentation fault (SIGSEGV) ausgelöst wird. Allerdings kann ich trotz mehrfachem Debugging keinen Grund hierfür finden, daher hoffe ich, dass mir hier jemand weiterhelfen kann. Hier ist erstmal mein Code:

Code: Alles auswählen

struct SGraphNode
{
    QList<SGraphEdge>* pEdges;
    QString sName;
    QString sDescription;
    QPoint ptPosition;

    // konstruktor
    SGraphNode(QString _sName,
               QString _sDescription,
               QPoint _ptPosition) : sName(_sName),
                                     sDescription(_sDescription),
                                     ptPosition(_ptPosition)
    {
        pEdges = new QList<SGraphEdge>();
    }
Dabei geht es um das Objekt "pEdges". Der fehler wird in diesem Ausschnitt ausgelöst:

Code: Alles auswählen

if(!m_pGraph->getNodes()->at(i).pEdges->isEmpty())
            {
                for(int j=0; j<m_pGraph->getNodes()->at(i).pEdges->size();j++)
                {
                    //if(!m_pGraph->getNodes()->at(i).pEdges->at(j).bDrawn)
                    {
                        pPainter->drawLine(m_pGraph->getNodes()->at(i).ptPosition,
                                           m_pGraph->getNodes()->at(i).pEdges->at(j).pNeighbour->ptPosition);
                    }
                }
            }
wpbei m_pGraph->getNodes eine Liste von SGraphNode-Objekten zurückliefert. Da ich mit dieser Liste genau so arbeite wie mit pEdges, kann ich mir den auftrtenden Fehler nicht erklären. Leider habe ich auch bei google nichts gefunden, das mir in dieser Hinsicht weiterhelfen kann.
Auch der Debugger gibt nicht allzu viele Informationen raus, sondern springt lediglich in qlist.h, Zeile 93

Code: Alles auswählen

inline bool isEmpty() const { return d->end  == d->begin; }
wobei es eventuell noch hilfreich seine könnte, dass der Debugger mir als Wert des Objektes p der Klasse QList (vom typ QListData) sehr kleine Werte (zwischen 0x00 und 0x20) anzeigt.

Ich hoffe, ihr könnt mir helfen.

Gruß
Niklas

Re: Segmentation fault bei QList::isEmpty()

Verfasst: 3. April 2014 21:18
von Christian81
Wir wissen nicht einmal wo Zeile 94 in deinem Code ist. Geschweige denn dass es der komplette Code ist. Bitte vereinfache den Code soweit als dass ein minimales Beispiel herauskommt oder es zumindest ersichtlich ist was da zurückgegeben wird.
Abgesehen davon ist es nicht sinnig die QList hier als Pointer zu speichern - ein Objekt reicht. Ich schätze einfach dass getNodes() einen ungültigen Pointer zurückliefert.

Re: Segmentation fault bei QList::isEmpty()

Verfasst: 4. April 2014 12:57
von Nik94
Ich konnte das problem jetzt dadurch lösen, QList direkt als Objekt und nicht als Pointer zu speichern. Danke für den Hinweise ;)