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 :

erreur dans la libération de la mémoire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut erreur dans la libération de la mémoire
    Bonjour, j'ai une erreur lorsque je veux libérer ma mémoire. J'ai trouvé le bug mais je n'arrive pas à l'expliquer.

    Ma question se trouve dans la fonction DestroyTabDonnees du fichier structure2.c (désolé de ne pas mettre la question explicitement sur ce post mais j'ai trouvé plus clair qu'elle soit directement à l'endroit du bug).

    Merci d'avance de vos réponses
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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
    void DestroyTabDonnees(donnees *** data,int NbFichiers)
    {
      int i;
      for(i=0;i<NbFichiers;i++)
      {
    	DestroyDonnees(&(*data)[i]); /* cette version fonctionne */
    	//DestroyDonnees(data[i]); /* cette version fait planter la liberation de la memoire !!  */
     
    	/* je ne comprends pas :
    	je prends la version qui plante : data[i] est bien un donnees **
    	je prends la version qui marche : (*data) est un donnees ** donc (*data)[i] est un donnees *
    	                                  et donc &(*data)[i]) est un donnees **
     
      question : pourquoi n'ai-je pas le meme pointeur ? (mais ceci dit je comprends pourquoi malgre
                 l'erreur je compile)
      */
      }
      FREE(*data);
    }
    • &(*data)[ i ] correspond à &((*data)[ i ]) et à (*data)+i
    • data[ i ] correspond à *(data+i)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    OK merci !

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

Discussions similaires

  1. libération de la mémoire dans un programme C
    Par callsty dans le forum Débuter
    Réponses: 11
    Dernier message: 25/12/2012, 16h08
  2. Problème de libération de la mémoire dans une fonction
    Par ArnaudFu1 dans le forum Débuter
    Réponses: 2
    Dernier message: 23/02/2012, 16h21
  3. Erreur dans une procédure stockée avec table mémoire
    Par Artylus dans le forum Développement
    Réponses: 4
    Dernier message: 27/01/2010, 17h57
  4. Erreur dans script mémoire - problème de calcul
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 30/07/2007, 12h01

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