Bonjour,
Problème qui me fait très mal à la tête là... vraiment du mal à comprendre !
Je travailles sous Code::Blocks sur une application threadée. Quand je lance mon application sous Code::Blocks par "Build & run" tout se passe bien.
En revanche, quand je vais dans le dossier "bin/Debug/" pour lancer le compilé "à la main" en cliquant sur l'exe il y a un problème qui fait planter (visiblement problème de mémoire) le programme alors que l'exécutable est strictement le même !
J'ai ciblé le problème, il viendrait du passage d'argument au thread.
Voici un extrait en gros du programme:
J'ai testé d'afficher les adresses de "infos" et "info_client" dans les deux, il s'agit de la même adresse. Il faut alors croire qu'il y a quelque chose qui dénature les valeurs au passage...?
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 void mafunction() { while(...) { struct InfosClient info_client = malloc(sizeof(InfosClient)); info_client->mon_int = i++; // i variable de la boucle incrémentée info_client->unpointeur = monptr; // pointeur constant // On créer un canal de communication avec ce client pthread_create(&info_client->thread, NULL, thread_client, info_client); } } // Ouvre une communication avec le client void* thread_client(void* arg) { InfosClient* infos = (InfosClient*)arg; printf("Int = %d\n", infos->mon_int); // Entier non incrémenté ! printf("Int2 = %d\n", infos->unpointeur->unevaleur); // plante ! return NULL; }
J'ai pensé à un problème de malloc mais l'adresse des pointeurs change à chaque fois, il y a donc bien allocation.
Puis aussi savoir surtout pourquoi ca plante quand je lance à partir de Code::Blocks tout fonctionne nickel et pourquoi quand je lance par le compilé ?!
Merci !
Partager