[C] probleme execution thread en C

le pape Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
le pape Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
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 <pthread.h>

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

1 réponse

le pape Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai trouvé la solution sur un autre forum donc je vous passe cet solution au cas ou quelqu'un se retrouve avec le meme style de probleme.

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

Par ça :
char res[256]={"message de thread2 : "}, mess[128];
strcpy(mess,ch);
0