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 du debug incomprehensible


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut Erreur du debug incomprehensible
    Salut a tous, voila j'ai l'erreur suivante lorsque j'execute valgrind apres avoir compiler mon prog en mode debug:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ==9273== Invalid read of size 1
    ==9273==    at 0x808DFED: removeOuterSpaces(char*) (io_routines.cxx:450)
    ==9273==    by 0x80929F9: CBatchEntry::ReadEntry(std::istream*) (processBatch.cxx:79)
    ==9273==    by 0x8093B72: CBatchFile::ReadEntry(int) (processBatch.cxx:404)
    ==9273==    by 0x804BD8D: main (HSam2Feat.cxx:348)
    ==9273==  Address 0x1BBDC287 is 1 bytes before a block of size 256 alloc'd
    ==9273==    at 0x1B905220: operator new[](unsigned) (in /usr/lib/valgrind/vgpreload_memcheck.so)
    ==9273==    by 0x8094000: get(std::istream&, char*&, char) (iostreamUtils.cxx:82)
    ==9273==    by 0x8090EE6: CHString::Get(std::istream&, char) (hu_string.cxx:191)
    ==9273==    by 0x8092992: CBatchEntry::ReadEntry(std::istream*) (processBatch.cxx:79)
    Je ne parviens pas a comprendre ce que tout cela signifie, surtout le lien avec le "new" ..?
    En effet dans mon prog dont les modules sont pratiquement tous en C, je viens d'ajouter une classe (donc du C++) et des appels dynamiques a son constructeur, alors est-ce que cela est lie...

    Merci d'avance de votre aide precieuse !

  2. #2
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Et bien ca ressemble fortement a une erreur d'allocation de mémoire, donc oui je dirais que c'est lié au new. Est-ce que tu as un bout de code à fournir?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    Alors le seul endroit ou je fais un new de ma classe perso, est il me semble ici (interieur d'une boucle qui cree dynamiquement des objets de ma classe Scdnet) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mf->array_of_scdnets.push_back(Scdnet(currentnet,mf->ncoeff + 1));
    Et encore ici le new est sous entendu par le push_back dans mon vector de la STL "array_of_scdnets".

  4. #4
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Est-ce que tu peux nous montrer tes constructeurs?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    Pas de probleme le voila, mais il appelle plein de petites fonctions annexes:

    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
    /***********************************/
    /* Constructor of the SCD net class*/
    /***********************************/
     
    Scdnet::Scdnet(char* inputweightfile, int inputncoeff) {
     
       // Set of parameters of the scd net object
       this->weightfile = inputweightfile;
       this->ncoeff = inputncoeff;
     
       // C-Code used to initialize the SennNet structure and read the bin net file
       const char* functionName = "Scdnet constructor";
     
       // allocate memory for the net structure
       NNscd=(SennNet *)malloc(sizeof(SennNet));
     
       if(NNscd==NULL)
       {
          perr(1, 1, "%s: not enough memory to allocate for a new NN Scd!", functionName);
       }
     
       if(read_bin_netfile(inputweightfile, NNscd))
       {
          perr(1, 1, "%s: cannot read NNf0 from file %s!", functionName, inputweightfile);
       }
     
     
      get_scdNN_inputaddr_and_length();
      get_scdNN_outputaddr_and_length();
      get_scdNN_which_cep_coef();
      get_scdNN_future_and_past();
      get_scdNN_context();
      get_scdNN_mean_and_stdev();
      init_scdNN_input_buffer(ncoeff);
     
    }

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    Et voici l'implementation de la classe:

    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
    50
    51
    52
    53
    54
    55
    56
    57
    /**************************************/
    /* Class Scdnet - B. Cabanes 13.03.06 */
    /*  implemented in nn_scd.cxx        */
    /**************************************/
     
    class Scdnet {
     
       public:
          // public declarations
     
          Scdnet(char* inputweightfile, int inputncoeff); // constructor
          void calc_scdnet();                             // net calculation
          ~Scdnet() { freescdnet(); }                     // destructor
          ringbuff *scdNN_rbuff;                          // the input ringbuffer
          SENN_VAR_TYPE *outputcluster0;                  // outputcluster
     
       private:
          // private declarations
     
          char* weightfile;
          int ncoeff;
          short nframes;
     
          // the Net
          SennNet *NNscd; 
     
          // NN-clusters see according top-file
          SENN_VAR_TYPE *inputcluster;
     
          short inputcluster_length;
          short outputcluster0_length;
     
          // vector for framereadorder
          short* contextvec;  // vector to hold the time order of the frames for the scdnet input vector
     
          // the constants 
          short featcoeff; /* holds the index of the feature vector of the current feature */
          SENN_VAR_TYPE *mean; // holds the means calc. in training to normalise input values
          SENN_VAR_TYPE *stdev; // holds the standard dev calc. in training to normalise input values
          short pastframes;  // number of past frames input into scdnet
          short futureframes;  // number of future frames input into scdnet
     
          // the constants
          SENN_VAR_TYPE *inp_mean;
          SENN_VAR_TYPE *inp_var;  
     
          // functions for the handling of the scdNN
          void get_scdNN_inputaddr_and_length();
          void get_scdNN_outputaddr_and_length();
          void get_scdNN_which_cep_coef();
          void get_scdNN_future_and_past();
          void get_scdNN_context();
          void get_scdNN_mean_and_stdev();
          void init_scdNN_input_buffer(short);
          void freescdnet();
     
    };

  7. #7
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Je manque de temps en ce moment mais je regarderai ca plus en detail dans la journee. Tu devrais parcontre utiliser les new/delete au lieu des instructions tel malloc puisque cette classe est en C++.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    Effectivement tu as raison je vais essayer d'harmoniser un peu tout ca. Mais la difficulte est que la plupart des modules sont en C et que j'ajoute inopinement ma classe C++ alors je n'ose pas non plus toucher a tout

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    J'ai une autre question, concernant cette fois les vector de la STL, est-ce que qqun peut me dire si je peux detruire mon vecteur de classe SCDnet en ecrivant simplement [code](mf->array_of_scdnets).clear();[code]
    ou si je dois parcourir le tableau entier et faire en sorte de detruire un par un les pointeurs que j'ai crees aux objets de la classe ? Merci d'avance ![/code]

  10. #10
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    clear() va retirer tout les elements present dans ton std::vector, mais le vecteur existera encore.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    Hmm je pense que ce n'est pas trop grave que mon vecteur subsiste, il est plus important que la structure sous jacente presente a la creation de chaque objet soit bien liberee car elle prend pas mal de memoire

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 54
    Points : 27
    Points
    27
    Par défaut
    Bon bah en fait laisse tomber j'ai fait un make new et maintenant ca marche

    je n'avais pas du tout compiler, notamment du fait de nouvelles dependances entre fichiers que j'avais du introduire avec mes nouvelles modifs. Merci en tout cas !

  13. #13
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Excellent

Discussions similaires

  1. Erreurs de doublons incomprehensibles
    Par gbrion dans le forum WinDev
    Réponses: 11
    Dernier message: 26/04/2007, 15h29
  2. Réponses: 6
    Dernier message: 14/12/2006, 00h37
  3. [Debug] [Trigger] erreur d'exe pas très précise
    Par viena dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/08/2005, 11h36
  4. Debug noyeau 2.6.3 bzImage erreur
    Par jean christophe dans le forum Administration système
    Réponses: 4
    Dernier message: 16/01/2005, 15h52
  5. [langage] Erreur incomprehensible!!!!!
    Par sali dans le forum Langage
    Réponses: 4
    Dernier message: 08/05/2004, 20h58

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