Bonjour,

Dans le script suivant, j'appelle initialement via une boucle for mon thread send_request_to_pub en lui passant en argument la variable sql_request. J'ai défini plus haut une structure d'argument car j'ai d'autres variables à lui faire passer.
Lors de mes tests, j'ai observé que le script passait correctement par ma boucle for lorsque la variable sql_request passée en argument ne dépassait pas les 67 caractères. Dès cette limite passée, le script provoque un défaut de segmentation avant la fin du premier thread.
J'ai essayé d'allouer dynamiquement de la mémoire à ma variable sans résultat.
Merci par avance pour votre aide.

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
 
typedef struct {
	char *sql_request;
} thread_req_send_args;
 
void *send_request_to_pub(void *arg) {
 
	thread_req_send_args *args = (thread_req_send_args *)arg;
 
	char *request = args->sql_request;
 
	printf("---- req_thread : %s\n", request);
 
	pthread_exit(NULL);
}
 
int main(int nbr, char* request[]) {
 
        char request_as_arg[400];
 
	sprintf(request_as_arg, "%s", request[1]);
 
	struct thread_req_send_args *args = malloc(sizeof(thread_req_send_args));
 
        args->sql_request = malloc(400);
 
        memcpy(args->sql_request, request_as_arg, sizeof(request_as_arg));
 
	if (pthread_create(&thread_send_to_pub, NULL, send_request_to_pub, (void *)&args) != 0) {
		system("echo $(date) ': L82 - Failed to create the sending request thread' >> /home/rpiaccess/replica_log.txt");
		exit(1);
	}
 
	pthread_join(thread_send_to_pub, NULL);
 
	free(args->sql_request);
	free(args);
 
	pthread_exit(NULL);
}