Bonjour,
Je dispose de deux Thread qui font de simple calcules et renvoi leurs résultats au main.
Le problème survient lors de la création des Thread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 
#include <stdio.h>
#include <math.h>
 
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
typedef struct str {
	int a;
	int b;
	int c;
	float d;}parametre;
 
void *fils1(void *valeur){
	parametre *val=(parametre *)malloc(sizeof(parametre));
 
	val=valeur;
 
	int a=val->a;
	int b=val->b;
	float d=val->d;
 
	float *x1=malloc(sizeof *x1);
 
	*x1=(-b-sqrt(d))/(2*a);
	//printf("\nThread1: Solution 1 trouvée  = %f\n",*x1);
	//printf("la valeur de x1 %f\n",*x1);
	pthread_exit(x1);
}
void *fils2(void* valeur){
	parametre *val=(parametre *)malloc(sizeof(parametre));
	val=valeur;              /*le cast se fait implicitement*/	
	int a=val->a;
	int b=val->b;
	float d=val->d;
	float *x2=malloc(sizeof *x2);
 
	*x2=(-b+sqrt(d))/(2*a);
	//printf("la valeur de x2 %f\n",*x2);
	pthread_exit(x2);
}
int main(){
	float d,x1,x2;
	pthread_t p1,p2;
	int val;
 
	float *sauv1=NULL;
	float *sauv2=NULL;
	parametre *valeur=(parametre *)malloc(sizeof(parametre));
	while(1){
		printf("Donner la valeur de a\n");
		scanf("%d",&valeur->a);
		printf("Donner la valeur de b\n");
		scanf("%d",&valeur->b);
		printf("Donner la valeur de c\n");
		scanf("%d",&valeur->c);
		valeur->d=(valeur->b*valeur->b)-(4*valeur->a*valeur->c);
		printf("D=%f\n",valeur->d);
 
		if((valeur->d)>=0){
			pthread_create(&p1,NULL,*fils1,valeur);
			pthread_create(&p2,NULL,*fils2,valeur);
			pthread_join(&p1,(void**)&sauv1);
			pthread_join(&p2,(void**)&sauv2);
			/*solution1=(float)sauv1;
			solution2=(float)sauv2;
			*/			
			printf("La Solution 1 X1= %f\nLa Solution 2 X2= %f\n",*sauv1,*sauv2);
 
			}
		else{
			printf("Pas de Solution\n");
 
		}
	free(sauv1);
	free(sauv2);
	}
return 0;
}
Console:
Donner la valeur de a
1
Donner la valeur de b
2
Donner la valeur de c
1
D=0.000000
Erreur de segmentation