Même exécutable mais comportement différent
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:
Code:
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 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...?
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 !