IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Pthread : malloc / free


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Par défaut Pthread : malloc / free
    Bonjour,

    Je ne suis pas familier des threads et j'aimerais bien faire les choses.

    Tout d'abord un bout de code :
    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
    for (i = 0 ; i < MAX ; i++){
        char * data = NULL;
        data = malloc(1024);
        if (data == NULL){
            printf("Impossible d'allouer la mémoire");
            exit(1);
        }
        memset(data ,0,1024);
        /* On remplie les données */
        .....
        /* On traite les données */
        int res = pthread_create(&threads[i], NULL, sendEvent, (void *) data);
        if (res != 0){
            printf("Impossible de créer le thread : %s.",strerror(errno));
            free(data);
            exit(1);
        }
        free(data);
    }
    Ma question est de savoir si le free(data) doit être fait à la fin de chaque tour de boucle, ou dans la fonction sendEvent.
    Mon intuition me dirait à chaque tour de boucle, mais le thread ne risque-t-il pas de ne plus avoir les données car déréférencées par le prog principal ?

    Note : le prog est volontairement simplistepour ne pas compliquer le post et ce concentrer sur le free.

    Merci d'avance pour vos lumières

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Oula !!!
    Tu passes un buffer à un thread et dans la foulée, tu fais un free !!
    Donc, ton thread reçoit un pointeur (sur une zone de 1k) qui n'est plus valide !!

    A mon avis, le free doit être fait dans le thread.

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Ou dans le thread qui fait le pthread_create, mais après le pthread_join.

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Par défaut
    Oula !!!
    :-) , c'est pour ça que je post ici, c'est pour bien faire les choses.

    Je pense que mon problème est résolu (le free dans le thread) car je viens de comprendre l'erreur avec le message de fregolo52.

    Par contre si le thread n'est pas terminé au prochain tour de boucle, est ce que le buffer du thread va être modifié ?

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Non puisque tu passes un nouveau buffer (un buffer différent) à chaque thread.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Par défaut
    Merci à vous deux, c'est plus clair maintenant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Malloc - Free] Comment bien les utiliser dans ce cas ?
    Par DOC doc doc dans le forum Débuter
    Réponses: 6
    Dernier message: 06/08/2007, 14h39
  2. Probleme d'allocation malloc free
    Par cmoibal dans le forum Linux
    Réponses: 1
    Dernier message: 23/05/2007, 14h21
  3. malloc, free et les fuites
    Par Syrmonsieur dans le forum C
    Réponses: 10
    Dernier message: 28/06/2006, 13h01
  4. Malloc/Free : Style élégant?
    Par Gilles.L dans le forum C
    Réponses: 5
    Dernier message: 07/05/2006, 21h44
  5. Réponses: 3
    Dernier message: 27/02/2006, 08h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo