2010-03-16 20 views
10

Mam program Qt, który wyświetla dane, które otrzymuje przez UDP. Działa dobrze przez około 30 sekund, ale po chwili powoduje błąd segmentacji i awarie. Te 30 sekund również nie jest naprawione.Co SIGSEGV, błąd segmentacji w Qt

użyłem debugger i dostał to:

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

Czy ktoś może mi powiedzieć, gdzie błąd może być?

+0

Jeśli pobierzesz i korzystasz z debugowej wersji libQT, powinieneś zobaczyć w stosie dokładnie to, gdzie się zawiesi. Podpowiedź, zainstaluj 'qt-debug * .rpm', jeśli używasz systemu rpm. –

Odpowiedz

11

Oznacza to, że program próbował uzyskać dostęp do pamięci, która do niego nie należy. Zasadniczo masz wskaźnik, który zawiera nieprawidłową wartość gdzieś w kodzie - wspólnym źródłem tego błędu jest wyłuskiwanie wskaźnika NULL.

+0

Oczywiście może być błąd w kodzie QT. –

+1

@wic Nigdy tak nie myśl, dopóki nie przekonasz się, że nie ma błędu w Kodzie. –

+1

Nie było błędu w kodzie Qt, oczywiście był to głupi błąd z mojej strony. – user269037

2

Potrzebujesz debuggera (i upewnij się, że masz pliki binarne z informacjami debugowania) - sprawdź ślad stosu w miejscu awarii. Założę się, że twój kod pojawi się gdzieś i na tym właśnie polega punkt wyjścia. Sprawdź przydziały, rozmiary buforów ...

+0

Yah, debugger był wielką pomocą. Nie użyłem go dużo wcześniej. – user269037

1

Upewnij się, że przydzielono tablicę, do której przypisujesz dane.

Mam ciągle ten błąd dla nie przydzielania.

Przykład Użyłem:

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

Latter zmieniły się, i to działało:

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

Powodzenia! :)

Powiązane problemy