2010-03-16 16 views
10

Ich habe ein Qt-Programm, das die Daten anzeigt, die es über UDP empfängt. Es funktioniert gut für ca. 30 Sekunden, aber nach einer Weile gibt es Segmentation Fault und stürzt ab. Diese 30 Sekunden sind ebenfalls nicht festgelegt.Whats SIGSEGV, Segmentierungsfehler in Qt

verwendete ich den Debugger und bekam dies:

Program received signal SIGSEGV, Segmentation fault. 
0x003c6fd4 in ??() from /usr/lib/libQtGui.so.4 

mir jemand sagen kann, wo der Fehler sein könnte?

+0

Wenn Sie die Debug-Version von libQT herunterladen und verwenden, sollten Sie in der Lage sein, in dem Stacktrace genau zu sehen, wo es abstürzt. Tipp: Installieren Sie 'qt-debug * .rpm', wenn Sie sich auf einem RPM-System befinden. –

Antwort

11

Es bedeutet, dass Ihr Programm versucht hat, auf Speicher zuzugreifen, der nicht dazu gehört. Im Grunde haben Sie einen Zeiger, der irgendwo in Ihrem Code einen ungültigen Wert enthält - eine häufige Quelle dieses Fehlers ist der Dereferenzierung eines NULL-Zeigers.

+0

Es könnte natürlich einen Fehler im QT-Code geben. –

+1

@wic Denk niemals so lange nach, bis du erschöpfend bewiesen hast, dass dein Code keinen Bug enthält. –

+1

Es gab keinen Bug im Qt-Code, offensichtlich war es ein dummer Fehler von meiner Seite. – user269037

2

Sie benötigen einen Debugger (und stellen Sie sicher, dass Sie Binärdateien mit Debug-Informationen haben) - überprüfen Sie die Stack-Trace an der Absturzstelle. Ich gehe davon aus, dass Ihr eigener Code irgendwo erscheinen wird, und das ist der Punkt, mit dem ich anfangen soll. Überprüfen Sie Zuordnungen, Puffergrößen ...

+0

Yah der Debugger war eine große Hilfe. Havent hat es schon lange benutzt. – user269037

1

Stellen Sie sicher, dass Sie das Array zugewiesen haben, dem Sie Daten zuweisen.

Ich hatte ständig diesen Fehler für die Zuweisung nicht.

Beispiel habe ich verwendet:

char* m_tempBuff; 
*(int*) m_tempBuff = i; 

Letzten geändert, und es funktionierte:

char m_tempBuff[sizeof(int)]; 
*(int*) m_tempBuff = i; 

Best of luck! :)