|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | |
|
Invité de passage
![]() |
Bonsoir à tous,
J'espère que vous avez tous passé de bonnes fêtes de Noël Pour ma part, j'ai un souci depuis quelques jours sur un programme C que je n'arrive pas à débugger! J'ai relus 15 fois le code, pas moyen de trouver l'erreur... Le programme est question est un programme en C avec des threads, le programme lance 5 threads (gérés avec pthread). Mon souci est, que de façon totalement aléatoire j'ai un segmentation default... Je n'ai accès qu'au débugger gdb, voici ce que me sort gdb : Citation:
Y a t-il un moyen de connaitre la ligne qui pose problème? Et est-ce que cette fonction strlen qui pose problème aléatoirement peut-être située non pas dans mon programme, mais dans une fonction d'une API par exemple (je pense à la fonction mysql_query de l'API mysql)? Et aussi comment pourrait planter la fonction strlen? En passant en argument une chaine de caractères sans le \0 ? Merci d'avance pour vos réponses, Romain |
|
|
|
00
|
|
|
#2 | |
|
Expert Confirmé
![]() Inscription : septembre 2006 Messages : 2 375 ![]() |
Citation:
strlen peut planter si le paramètre n'est pas une adresse correcte (variable non initialisée, pointeur sur un bloc du heap désalloué…) ou si la mémoire pointée ne contient pas de '\0' ce qui peut être dû à une corruption par ailleurs… étant donné le contexte multi thread il est à supposer un problème d'accès concurrent à une même zone mémoire… en particulier si vous appelez mysql_query dans les threads sans être certain que la librairie mysql ait été compilée avec les options pour être multithread-compatible… |
|
|
|
00
|
|
|
#3 | ||
![]() ![]() Inscription : décembre 2003 Messages : 14 505 ![]() |
Citation:
Citation:
__________________
Pas de Wi-Fi à la maison : CPL Des infos sur la programmation et le langage C: http://bien-programmer.blogspot.com/ http://www.bien-programmer.fr/ http://bien-programmer.forum-actif.net/forum.htm |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com