Bonjour à tous,

après une certain nombre de recherche je me trouve bien bloqué
j'essaye de mettre des thread dans mon programme de façon à accélérer certaine partie de mon programme tout en essayant d'utiliser au mieux les cœurs de ma machine.

Mon problème:
J'ai une structure StructAgent composer de deux éléments un identifiant et un pointeur sur la structure suivante

à partir de la j'ai une liste de structure pas compliqué.

mon problème est dans la suppression du premier élément de la liste.

j'appelle ma fonction avec

Code : Sélectionner tout - Visualiser dans une fenêtre à part
pthread_create (&supAgent_thread, NULL, sup_agent2, StructAgent);
jusque la tous marche bien

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
void *sup_agent2(void *Agent)
{
	unAgent *tmp2 = (unAgent*) Agent;
	unAgent *tmp = (unAgent*) (Agent);
 
	//nextlist
	tmp2 = (tmp2)->suivant;
	while(tmp2 != NULL)
	{
		if((tmp2)->energie <= 0) 
		{
			(*tmp).suivant = (*tmp2).suivant;
			free(tmp2);
			tmp2 = (tmp)->suivant;
		}
		else
		{
			tmp = (tmp)->suivant;
			tmp2 = (tmp2)->suivant;
		}
	}
 
	// firstlist
	unAgent *tmp3 = (unAgent*) (Agent);
	unAgent *tmp4 = (unAgent*) (&Agent);
	if( (tmp3)->energie <= 0)
	{
		tmp4 = (tmp3)->suivant;
		free(tmp3);
	}
	return NULL;
}
mon problème vient des dernière ligne du code soit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
	// firstlist
	unAgent *tmp3 = (unAgent*) (Agent);
	unAgent *tmp4 = (unAgent*) (&Agent);
	if( (tmp3)->energie <= 0)
	{
		tmp4 = (tmp3)->suivant;
		free(tmp3);
	}
quand j'insère la structure suivante ((tmp3)->suivant) à la racine (mon pointeur de base Agent) j'ai une belle erreur de segmentation.

le problème doit être simple mais je tourne un peu en rond depuis un bon moment, je dois me tromper à un endroit.

J'ai fais le tour ses faqs mais en utilisant thread je n'ai plus de pointeur de pointeur.
La méthode ci-dessous plante aussi et la je me retrouve coincé

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
	// firstlist
	unAgent *tmp3 = (unAgent*) (Agent);
	if( (tmp3)->energie <= 0)
	{
		Agent = (tmp3)->suivant;
		free(tmp3);
	}
Merci de vos réponses