Salut à tous,
Alors voilà je démarre un peu le C++, et je me retrouve face à une erreur que je ne comprend pas.
J'ai une fonction qui est lancée dans un thread (pthread), que voilà :
Avec ces définitions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 static void *client (void *p_data) { struct cli *p_cli = reinterpret_cast<struct cli*>(p_data); if (p_cli != NULL) { // Traitements ... free (p_cli); } }
Lorsque le free(p_cli) est exécuté, j'ai droit à cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; struct cli { pthread_t thread; SOCKADDR_IN sin; SOCKET sock; int err; };
Je ne comprend pas trop d'où ça peut venir...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 *** glibc detected *** free(): invalid next size (fast): 0x0804b008 *** Abandon
Le p_data en paramètre est défini comme ceci dans la fonction qui lance le thread :
et passé ainsi en argument de pthread_create :
Code : Sélectionner tout - Visualiser dans une fenêtre à part struct cli *p_cli = (struct cli *) malloc (sizeof (p_cli));
J'utilise les éléments de ma structure dans ma fonction client, et à priori ça fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part pthread_create (&p_cli->thread, NULL, client, (void *)p_cli);
Je ne suis pas du tout familié de tout ce qui est gestion de la mémoire, j'utilise généralement des langages qui gèrent ça eux mêmes, et là je suis un peu perdu.
Je sais qu'étant donné qu'un thread est lancé, il me faut gérer la mémoire sinon il ne libère pas la mémoire qu'il occupe lorsqu'il s'arrête. Mais je ne comprend pas cette erreur...
Si quelqu'un pouvait m'éclairer ça serait cool
Merci par avance en tous cas !!
A+
Flo
Partager