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 :

valgrind erreur tableau de structure dynamique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Par défaut valgrind erreur tableau de structure dynamique
    Bonjour à tous,

    après avoir écrit un programme j'ai voulu à l'aide de valgrind déterminer les fuites de mémoire et faire un profilage.
    mon souci c'est que j'ai eu un message d'erreur mais je ne sais pas comment résoudre ce problème.

    voici le message d'erreur de valgrind :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ==2879== Invalid read of size 8
    ==2879==    at 0x400F79: imersion (imersion.c:30)
    ==2879==    by 0x4029F7: main (main.c:40)
    ==2879==  Address 0xed31040 is 0 bytes after a block of size 78,643,200 alloc'd
    ==2879==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==2879==    by 0x400BB0: imersion (imersion.c:18)
    ==2879==    by 0x4029F7: main (main.c:40)
    j'ai modifié ce message pour mettre le message ici :

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    void imersion(unsigned int nrow,unsigned int ncol,double **I,int **lab)
    {  
      typedef struct Pixel //il ne faut pas placer ceci à l'extérieur de la fonction ?
      {
         double val;
         int row;
         int col;
       } Pixel;
     
       register  unsigned int k=0;
       unsigned int size_tri=nrow*ncol;
       Pixel *tri=NULL; //il me semble que c'est inutile
    Tu peux directement faire Pixel *tri = malloc(...)
     
     
     
      /* initialisation */
      tri=malloc(size_tri*sizeof(Pixel));assert(tri!=NULL);
     
     
       /* trier les pixel par ordre croissant puis enlever les doublons */
       quicksort(tri,0,size_tri-1); //tu trie un tableau qui est vide (= contenu indéterminé) ? Quel intérêt ?
     
     
       /* Innondation */
        for(k=0;k<size_tri; ){
     
     
        	  double grey_value=tri[k].val;
        	  for( ;tri[k].val == grey_value;++k){ //je ne pense pas que ce soit la méthode la plus claire.
        	     .....
                 ......
             }
    /*  Proposition */
    Pixel * fin = tri + size_tri;
    Pixel * newTab = tri + 1;
    double value = tri->val;
    for(Pixel * t = tri + 1;t <= fin;t++)//parcours du tableau dans son intégralité (sauf le premier élément)
           if(t->val != value)
           {
                   value = t->val;
                   *newTab = *t;
                   newTab++;
            }
    //taille du tableau = newTab - tri;
    /**/
    //tu as alloué dynamiquement de la mémoire pour tri, mais quand libères-tu la mémoire avec free ?
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Par défaut
    euh oui la structure a été déclaré dans le .h de la fonction. Pour que ce soit plus compréhensible je l'ai mis la dans le topic.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    D'accord, j'ai édité mon précédant post pour te rajouter une proposition de boucle qui me parait plus simple et judicieux.

    Sinon, quand effectues-tu le free?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Par défaut
    Euh je n'ai mis qu'une partie de mon code le free je le fait à la fin de la boucle.
    Pour algorithme que je veux implémenter je suis obligé de faire ce style de boucle. C'est un peu difficile d'expliquer mon problème sans que vous ayez la totalité de mon code.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Est-ce que tu peux nous dire quelle est la ligne 30 du fichier imersion.c ?
    Vu que tu n'as mis que des extraits, la ligne 30 indiquée par Valgrind n'est pas la ligne 30 de ce que tu nous montre.

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

Discussions similaires

  1. Initialisation d'un tableau de structures dynamique
    Par mokochan dans le forum Débuter
    Réponses: 4
    Dernier message: 09/09/2013, 18h10
  2. tableau de structures dynamiques C# vers C++
    Par MottetCCSF dans le forum C#
    Réponses: 1
    Dernier message: 17/07/2009, 07h43
  3. Erreur - tableau de structure
    Par Airlink dans le forum Débuter
    Réponses: 8
    Dernier message: 15/06/2008, 20h40
  4. Allocation dynamique tableau dans structure
    Par chental dans le forum C
    Réponses: 2
    Dernier message: 03/08/2006, 09h03

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