Probleme (segmentation) d'execution d'un thread

[Résolu]
Signaler
Messages postés
19
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
15 novembre 2011
-
Messages postés
19
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
15 novembre 2011
-
salut tout le monde
j'ai besoin de votre aide pour m'aider a resoudre un petit probleme d'execution de mon programme en C-ANSI
ce programme permet de creer 2 thread et de les utiliser (rien de bien sorcier normalement).

je le compile sous linux (debian) en utilisant la commande
gcc -c thread1.c -o thread1 -lpthread

voila mon code:

#include <stdio.h>
#include <string.h>
#include

void * traiteTh1(void *);
void * traiteTh2(void *);

int main()
{
int err, val, res;
pthread_t idThread[2];
char mess[1024], ret;
void * ptrRetVal;

printf("\nentrez une phrase : \n");
fgets(mess,1024,stdin);

printf("entrez une valeur : \n");
scanf("%d",& val);

err=pthread_create(& idThread[0], NULL, traiteTh1, (void *)& val);
if (err!=0)
{
perror("creation du thread 1 impossible");
exit(0);
}

err=pthread_create(& idThread[1], NULL, traiteTh2, (void *)& mess);
if (err!=0)
{
perror("creation du thread 2 impossible");
exit(0);
}

err=pthread_join(idThread[0], & ptrRetVal);
if (err!=0)
{
perror("join du thread 1 impossible");
exit(0);
}
res=* ((int *)ptrRetVal);
printf("TID du thread1: %u\n",idThread[0]);
printf("resultat retourne : %d\n", res);

err=pthread_join(idThread[1], ptrRetVal);
if (err!=0)
{
perror("join du thread 2 impossible");
exit(0);
}
printf("TID du thread2: %u\n",idThread[1]);
printf("%s\n", ptrRetVal);
}

void * traiteTh1(void * num)
{
int val, res;

printf("numero du TID du thread1: %u\n", pthread_self());
val=*((int *)num);
printf("valeur entrez : %d\n",val);
res=val*2;
pthread_exit((void *)& res);
}

void * traiteTh2(void * ch)
{
char * res={"message de thread2 : "},* mess;

mess=((char *) ch);
printf("numero du TID du thread2: %u\n", pthread_self());
printf("chaine de caracteres entree : %s\n",ch);

strcat(res,mess); /* mon PB est ici apparement*/

return((void *) res);
}

quand je l'execute dans le terminal il me dit:

entrez unz phrase :
salut
entrez une valeur :
12
numero du TID du thread1: 16386
valeur entrez : 12
numero du TID du thread2 : 32771
chaine de carractere entrree : salut

TID du thread1 : 16386
resultat retourne : 24
erreur de segmentation

je remercie d'avance toute personne essayant de m'aider et bonne chance

3 réponses

Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Essaye de remplacer :
char * res={"message de thread2 : "},* mess;
mess=((char *) ch);

Par ça :
char res[256]={"message de thread2 : "}, mess[128];
strcpy(mess,ch);
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

Vite regardé il manque pthread_exit dans le code de ton thread #2. Sinon j'ai déjà eu ce problème mais je n'arrive pas a me souvenir comment ni pourquoi.

http://vbaddons.free.fr
Cégep Lévis
Messages postés
19
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
15 novembre 2011

merci goutbouyo c'est bien la solution, sa fonctionne correctement avec quelque modification en plus (comme tu le signalé max12)
je vous remercie tout les deux pour votre efficacité et votre rapidité