Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1035 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  std::bad_alloc, impossible de savoir d'où il vient.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

std::bad_alloc, impossible de savoir d'où il vient.

n°1652972
moystard
Posté le 04-12-2007 à 22:34:54  profilanswer
 

Bonsoir tout le monde!
 
J'ai un problème super urgent. une fois sur cinq quand je lance mon programme sur le même fichier, j'ai un std::bad_alloc. En mettant des cout dans mon programme, j'ai découvert que le fautif est dans dans cette méthode :
 

Citation :

void ReferenceCroisee::Remplir (std::vector<char *> fichiersAnalyse, char
*fichierIdentificateurs)
// Algorithme :  
// La méthode commence par appeler la méthode LireMotsCles.
// Ensuite, chaque fichier dont le nom est passé en argument de
// la méthode (dans le vector fichiersAnalyse) est exploré.
// Si l'ouverture d'un fichier rencontre une erreur, on la signale à
// l'utilisateur par un message d'erreur, et on passe au fichier suivant.
// Chaque fichier est lu mot à mot. Si le mot correspond à l'un des mots-clés,
// alors l'occurence est enregistrée dans la structure en appelant la méthode
// AjouterOccurence.
//
{
    LireMotsCles(fichierIdentificateurs);
    for (std::vector<char *>::iterator it = fichiersAnalyse.begin();
it!=fichiersAnalyse.end(); it++)
    {
        Fichier file(*it);
        if ( file.OuvrirFichier())
        {
            std::string mot;
            mot = file.LectureMot();
            while ( mot != "" )
            {    
                for (std::vector<std::string>::iterator it2 = motsCles.begin();
                it2!=motsCles.end(); it2++)
                {
                    if ((*it2).size()==mot.size()){
                        if (*it2==mot)
                        {   AjouterOccurence(mot,*it,file.LigneCourante());
                        }
                    }
                }
                mot = file.LectureMot();
            }
        }
        else
        {
        std::cout << "ERR : Fichier " << *it <<" non trouvé." << std::endl;
        }
    }
 
}


 
Vous voyez quelque chose qui pourrait produire un bad_alloc?
 
Merci beaucoup pour votre aide!

mood
Publicité
Posté le 04-12-2007 à 22:34:54  profilanswer
 

n°1652978
IrmatDen
Posté le 04-12-2007 à 22:45:46  profilanswer
 

Salut,
 

moystard a écrit :

En mettant des cout dans mon programme, j'ai découvert que le fautif est dans dans cette méthode :


Tu voudrais pas plutôt utiliser un debuggeur? Tu en apprendras beaucoup plus sur le pourquoi du comment.
Il serait aussi utile d'utiliser des passages par référence que par copie (fichierAnalyse, et peut-être d'autres).

n°1652982
moystard
Posté le 04-12-2007 à 22:55:37  profilanswer
 

C'est la où j'ai une lacune. Mon programme doit être exécuté avec des parametres (fichiers à analyser entre autre), et je trouve pas dans kdevelop la possibilité de débugger en lançant le main avec des paramètres...

n°1653033
IrmatDen
Posté le 05-12-2007 à 01:45:18  profilanswer
 

Je peux pas t'aider sur le passage de paramètres avec KDevelop, mais tu peux sans doute "construire" des valeurs représentatives (au pire), et les utiliser à l'identique.

n°1653035
Olivier51
Posté le 05-12-2007 à 01:52:59  profilanswer
 

Jette un oeil à Electric Fence (la librairie) et gdb (le debuggeur).
 
On ne peut pas plus t'aider que ça ne connaissant pas le contenu des methodes appelées par la méthode suspecte. Mais déjà avec les deux noms donnés précédemment, tu devrais trouver quelque chose.

n°1653093
bjone
Insert booze to continue
Posté le 05-12-2007 à 09:59:11  profilanswer
 

bah char*, commente AjouterOccurence(), a tous les coups l'exception va partir :D
 
si tu utilisais set<> pour tes mots clés, ce serait plus efficace de faire une recherche avec un find(), que de comparer séquentiellement un vector<>.


Message édité par bjone le 05-12-2007 à 10:00:23
n°1653212
moystard
Posté le 05-12-2007 à 12:40:05  profilanswer
 

merci pour vos infos, j'ai découvert le bug en question à 3h du matin... et j'ai réussi à le corriger. Il était dans la méthode qui lit chaque mot :) Merci à vous!

n°1653215
Taz
bisounours-codeur
Posté le 05-12-2007 à 12:48:02  profilanswer
 

vire ces char*

n°1653216
Taz
bisounours-codeur
Posté le 05-12-2007 à 12:48:35  profilanswer
 

(*it2).size()==mot.size()){
                        if (*it2==mot)  
 
optimisation foireuse et inutile

n°1653422
ptitchep
Posté le 05-12-2007 à 17:00:15  profilanswer
 

Pour debugger, j'utilise kdbg (qui utilise gdb je crois). je le trouve pas mal et tu peux choisir les arguments envoyés à ton prog.


---------------
deluser --remove-home ptitchep
mood
Publicité
Posté le 05-12-2007 à 17:00:15  profilanswer
 

n°1653529
moystard
Posté le 05-12-2007 à 23:18:22  profilanswer
 

Taz a écrit :

(*it2).size()==mot.size()){
                        if (*it2==mot)

 

optimisation foireuse et inutile

 

Pas du tout inutile, elle me fait gagner 1,5s sur un fichier de 10 Mo :p

 

Et les char * c'est pour iostream qui manipule les noms de fichiers en char * .

 
ptitchep a écrit :

Pour debugger, j'utilise kdbg (qui utilise gdb je crois). je le trouve pas mal et tu peux choisir les arguments envoyés à ton prog.

 

Merci beaucoup, je vais tester ça :)

Message cité 1 fois
Message édité par moystard le 05-12-2007 à 23:21:26
n°1653563
bjone
Insert booze to continue
Posté le 06-12-2007 à 01:12:24  profilanswer
 

moystard a écrit :


 
Pas du tout inutile, elle me fait gagner 1,5s sur un fichier de 10 Mo :p
 


 
en principe ça devrait pas être le cas, mais bon c'est suivant l'implémentation :/

n°1655071
Taz
bisounours-codeur
Posté le 08-12-2007 à 21:46:12  profilanswer
 

bjone a écrit :


 
en principe ça devrait pas être le cas, mais bon c'est suivant l'implémentation :/


J'envisage pas une implémentation de ce genre, je pense que le problème n'est pas là.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  std::bad_alloc, impossible de savoir d'où il vient.

 

Sujets relatifs
erreur frm-30085 impossible de moduler l'application forms en vu de saphpbb2 - impossible de me connecter en admin
SimpleXML et noeud fermé : impossible de parser[RESOLU] Impossible de SELECT suite au lancement d'une fonction
Telechargement impossible cause PHP...Impossible de colorier le composant SSTab! Y'a t-il une alternative ?
Récupration d'un id que l'on vient d'ajouter à la BDD[PHP + SHELL] impossible d'exécuter un shell dans lighttpd
[Java] Savoir si une date est valideSavoir si on est administrateur sous WinXP
Plus de sujets relatifs à : std::bad_alloc, impossible de savoir d'où il vient.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR