11
votes

Whats SIGSEGV, défaut de segmentation dans QT

J'ai un programme QT qui affiche les données qu'il reçoit via UDP. Cela fonctionne bien pendant environ 30 secondes, mais après un certain temps, il donne une faute de segmentation et des accidents. Cette 30 secondes n'est pas non pas corrigée.

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

peut-on me dire où l'erreur peut être?


1 commentaires

Si vous téléchargez et utilisez la version de débogage de LIBQT, vous devriez être capable de voir dans la stacktrace exactement où il se bloque. Indice, installez le QT-Débug * .rpm Si vous êtes sur un système RPM.


3 Réponses :


14
votes

Cela signifie que votre programme a essayé d'accéder à la mémoire qui ne l'appartient pas. Fondamentalement, vous avez un pointeur contenant une valeur non valide quelque part dans votre code - une source commune de cette erreur est la déséroférance d'un pointeur NULL.


3 commentaires

@wic ne pense jamais comme ça jusqu'à ce que vous ayez prouvé de manière exhaustive, il n'y a pas de bogue dans votre code.


Il n'y avait pas de bug dans le code QT évidemment c'était une erreur idiote de ma part.


Je reçois la même erreur et je ne peux toujours pas comprendre ce que je devrais faire.



2
votes

Vous avez besoin d'un débogueur (et assurez-vous de disposer de binaires avec des informations de débogage) - Vérifiez la trace de la pile sur le site de Crash. Je suppose à peu près que votre propre code apparaîtra quelque part, et c'est le point de commencer avec. Vérifiez les allocations, tailles de tampons ...


1 commentaires

Yah le débogueur était d'une grande aide. Havent l'a beaucoup utilisé auparavant.



1
votes

Assurez-vous de disposer de la matrice allouée que vous attribuez des données à.

J'ai constamment eu cette erreur pour ne pas attribuer. p>

Exemple J'ai utilisé: P>

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


0 commentaires