Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème fonction get/Set array

    2 décembre 2020 à 23:54:18

    Bonjour/bonsoir ! :D

    Je vous explique, j'ai une structure représentant un tableau et je suis censer coder les getters/setters de cette fonction ceux-ci marche mais créer des problèmes sous Valgrind ( pas des pbs de fuites mémoires) mais je n'arrive pas à les identifier, je pense que ça vient directement d'une erreur dans mon code, est-ce que quelqu'un aurait une idée de comment les recoder plutôt ?

    struct array {
      int *data;
      size_t capacity;
      size_t size;
    };
    
    int array_get(const struct array *self, size_t index) {
        
        if (index>self->size) {
            return 0;
        }
        return self->data[index];
        
    }
    
    void array_set(struct array *self, size_t index, int value) {
    
        if (index>self->size) {
            return 0;
        }
        self->data[index]=value;
    }
    Je vous mettrai l'erreur Valgrind en détail si vous demandez mais je ne pense pas qu'elle vous sera utile ^^'

    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2020 à 0:26:09

      Je ne vois pas de fuite mémoire dans ton code. Les fuite mémoire ce sont des "malloc" que tu ne "free" pas !

          if(index>self->size)

      Si size est la taille de ton tableau data, data[size] sort du tableau ! 

      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2020 à 10:07:09

        Hello,

        pour avoir un rapport valgrind utile il est nécessaire de :

        • compiler en mode debug → -g et surtout pas de -O ;
        • lancer valgrind avec les options --leak-check=full --track-origins=yes --show-reachable=yes ;
        • nous fournir des exemples de cette sortie valgrind pour qu'on t'explique comment la lire, la comprendre et l'utiliser pour débusquer les mauvaises utilisations.

        En passant : pas de valeur dans un return d'une fonction void …

        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2020 à 11:20:16

          • Tu ne peux pas faire un return 0 dans une fonction qui retourne void
          • Ne fais pas de programmation défensive, si ton utilisateur met un indice hors borne c'est pas le problème de ta fonction. Les assertions sont là pour détecter les erreurs de programmation.

          Pour ton problème, ce code ne présente aucune fuite dès lors qu'il ne contient ni malloc ni free.

          • Partager sur Facebook
          • Partager sur Twitter

          git is great because Linus did it, mercurial is better because he didn't.

            3 décembre 2020 à 11:34:37

            rouloude a écrit:

            Je ne vois pas de fuite mémoire dans ton code. Les fuite mémoire ce sont des "malloc" que tu ne "free" pas !

                if(index>self->size)

            Si size est la taille de ton tableau data, data[size] sort du tableau ! 


            Alors effectivement l'erreur venait de là, merci ! :D

            White Crow a écrit:

            Hello,

            pour avoir un rapport valgrind utile il est nécessaire de :

            • compiler en mode debug → -g et surtout pas de -O ;
            • lancer valgrind avec les options --leak-check=full --track-origins=yes --show-reachable=yes ;
            • nous fournir des exemples de cette sortie valgrind pour qu'on t'explique comment la lire, la comprendre et l'utiliser pour débusquer les mauvaises utilisations.

            En passant : pas de valeur dans un return d'une fonction void …

            Oh c'est cool ça, ça me permettra de debug de façon un peu plus maline les prochaines fois, par contre -g ne semble pas fonctionner
            valgrind --leak-check=full -g ./aout
            ne marche pas



            -
            Edité par Velas_ 3 décembre 2020 à 11:38:14

            • Partager sur Facebook
            • Partager sur Twitter
              3 décembre 2020 à 12:06:40

              Velas_ a écrit:

              rouloude a écrit:

              Je ne vois pas de fuite mémoire dans ton code. Les fuite mémoire ce sont des "malloc" que tu ne "free" pas !

                  if(index>self->size)

              Si size est la taille de ton tableau data, data[size] sort du tableau ! 


              Alors effectivement l'erreur venait de là, merci ! :D

              White Crow a écrit:

              Hello,

              pour avoir un rapport valgrind utile il est nécessaire de :

              • compiler en mode debug → -g et surtout pas de -O ;
              • lancer valgrind avec les options --leak-check=full --track-origins=yes --show-reachable=yes ;
              • nous fournir des exemples de cette sortie valgrind pour qu'on t'explique comment la lire, la comprendre et l'utiliser pour débusquer les mauvaises utilisations.

              En passant : pas de valeur dans un return d'une fonction void …

              Oh c'est cool ça, ça me permettra de debug de façon un peu plus maline les prochaines fois, par contre -g ne semble pas fonctionner
              valgrind --leak-check=full -g ./aout
              ne marche pas


              Compiler → utiliser un compilateur (comme gcc, clang, …) → gcc -g -o exe fichier.c (en version quick and dirty) ; c'est là qu'il faut mettre le -g … pour intégrer dans l'exécutable des informations de débugage.

              Profiler → utiliser un profileur (comme valgrind en mode profil d'exécution ou profil de mémoire ou profil de cache ou … ou comme les sanitizers dispo comme bibliothèques lors de la compilation) → c'est là que tu mets les options  --leak-check=full --track-origins=yes --show-reachable=yes → valgrind  --leak-check=full --track-origins=yes --show-reachable=yes ./mon_executable.

              Debuger → utiliser un débugueur (comme gdb, lldb ou des front ends comme ddd, nemiver, …) est un savoir indispensable si tu programmes ; sans ça tu seras éternellement obligé de venir poster des questions sur un forum simplement pour demander de l'aide.

              Une autre capacité à acquérir est celle de rechercher des solutions sur internet, et de bien expliquer son problème lors de la demande d'aide.

              • Partager sur Facebook
              • Partager sur Twitter
                3 décembre 2020 à 16:41:10

                White Crow a écrit:

                et de bien expliquer son problème lors de la demande d'aide.

                Alors là, je plussois ++ ! Parce que quand t'on voit les questions bien trop souvent, ça laisse pantois !

                • Partager sur Facebook
                • Partager sur Twitter

                Problème fonction get/Set array

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown