2010-03-16 7 views
10

J'ai un programme Qt qui affiche les données qu'il reçoit sur UDP. Cela fonctionne correctement pendant environ 30 secondes, mais après un certain temps, cela provoque des erreurs de segmentation et des plantages. Ces 30 secondes ne sont pas non plus réparées.Whats SIGSEGV, défaut de segmentation dans Qt

J'ai utilisé le débogueur et obtenu ceci:

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

Quelqu'un peut-il me dire où l'erreur est peut-être?

+0

Si vous téléchargez et utilisez la version de débogage de libQT, vous devriez pouvoir voir dans la pile exactement où elle se bloque. Astuce, installez le 'qt-debug * .rpm' si vous êtes sur un système RPM. –

Répondre

11

Cela signifie que votre programme a essayé d'accéder à la mémoire qui ne lui appartient pas. Fondamentalement, vous avez un pointeur qui contient une valeur non valide quelque part dans votre code - une source commune de cette erreur est le déréférencement d'un pointeur NULL.

+0

Il pourrait y avoir un bug dans le code QT bien sûr. –

+1

@wic Ne pensez jamais comme ça jusqu'à ce que vous ayez prouvé de manière exhaustive qu'il n'y a pas de bug dans votre code. –

+1

Il n'y avait pas de bug dans le code Qt évidemment, c'était une erreur stupide de ma part. – user269037

2

Vous avez besoin d'un débogueur (et assurez-vous que vous avez des binaires avec des informations de débogage) - vérifiez la trace de la pile sur le site du crash. Je suppose que votre propre code apparaîtra quelque part, et c'est le point de départ. Vérifiez les allocations, les tailles de tampon ...

+0

Yah the debugger a été d'une grande aide. Havent l'a utilisé beaucoup avant. – user269037

1

Assurez-vous d'avoir alloué un tableau auquel vous assignez des données.

J'ai toujours eu cette erreur pour ne pas allouer.

Exemple J'ai utilisé:

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

Derniers changé, et cela a fonctionné:

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

Bonne chance! :)