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
jusque la tous marche bienCode:pthread_create (&supAgent_thread, NULL, sup_agent2, StructAgent);
mon problème vient des dernière ligne du code soitCode:
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; }
quand j'insère la structure suivante ((tmp3)->suivant) à la racine (mon pointeur de base Agent) j'ai une belle erreur de segmentation.Code:
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); }
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é
Merci de vos réponsesCode:
1
2
3
4
5
6
7 // firstlist unAgent *tmp3 = (unAgent*) (Agent); if( (tmp3)->energie <= 0) { Agent = (tmp3)->suivant; free(tmp3); }