Erreur lors du free() d'une structure
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à :
Code:
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);
}
} |
Avec ces définitions :
Code:
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;
}; |
Lorsque le free(p_cli) est exécuté, j'ai droit à cette erreur :
Code:
1 2
| *** glibc detected *** free(): invalid next size (fast): 0x0804b008 ***
Abandon |
Je ne comprend pas trop d'où ça peut venir...
Le p_data en paramètre est défini comme ceci dans la fonction qui lance le thread :
Code:
struct cli *p_cli = (struct cli *) malloc (sizeof (p_cli));
et passé ainsi en argument de pthread_create :
Code:
pthread_create (&p_cli->thread, NULL, client, (void *)p_cli);
J'utilise les éléments de ma structure dans ma fonction client, et à priori ça fonctionne.
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:ccool:
Merci par avance en tous cas !! :D
A+
Flo