[C] probleme execution thread en C

Fermé
le pape Messages postés 9 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 3 novembre 2006 - 3 nov. 2006 à 16:13
le pape Messages postés 9 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 3 novembre 2006 - 3 nov. 2006 à 17:20
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 vendredi 4 juin 2004 Statut Membre Dernière intervention 3 novembre 2006
3 nov. 2006 à 17:20
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