FujiwaranoSai
Messages postés2Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 2 mai 2007
-
2 mai 2007 à 16:51
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 2007
-
2 mai 2007 à 22:55
Voila un morceau de code :
void *test(void *meuh)
{
}
bool CNetwork::initSocket()
{
if ((_uSocket (unsigned int)socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) INVALID_SOCKET)
return (false);
printf("socket is created\n");
int reuse = 1;
setsockopt(_uSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&reuse, sizeof(reuse));
pthread_t zou = 2;
printf("il va y avoir un segfault!\n");
pthread_create(&zou, NULL, test,NULL);
printf("ou pas :p\n");
return true;
}
Donc voila, ca compile bien sous linux, mais a l'exec, ca pete un segfault sur le pthread_create...
Si vous avez une idee (ou plus :p) sur la raison de ce segfault, ca m'arrangerais beaucoup :p
emmatopiak
Messages postés149Date d'inscriptionmercredi 28 mars 2007StatutMembreDernière intervention17 mai 20072 2 mai 2007 à 22:55
Salut,
Donc, le premier parametre de socket devrait etre PF_INET semantiquement, mais l'erreur ne vient pas de là.
___ le man de pthread_create dit cela : If the start_routine returns, the effect is as if there was an implicit call to pthread_exit() using the return value of start_routine as the exit status.___
-MAIS vu que ta fonction "test" ne fait pas un return NULL, elle va renvoyer une valeur etrange qui pourrait peut-etre faire seg-faulter pthread_exit.
-Y'a aussi le probleme de ta variable zou que tu devrais allouer dynamiquement pour eviter les problemes.
-je te conseille en gros de faire un programme qui ne contient rien que l'appel a ton pthread_create, pas de sockets ni rien d'autre, et de faire les choses proprement en faisant retourner NULL à ta fonction test.
-Et de compiler avec -Wall pour voir les warnings (notamment que test ne retourne rien)
Ca aidera je pense:p
@++
Si ca se trouve c'est ton return NULL qui manque seulement, du coup ca renvoie return RANDOM-VALUE
( qui a de grandes chances de pointer en memoire là ou faut pas )