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 :

Error: std ::bad alloc


Sujet :

C++

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Error: std ::bad alloc
    Bonjour,

    Voila j'ai cette erreur quand je lance mon code " std ::bad alloc ". Je suis stagiaire, j'ai un code déjà écrit. Je dois juste ajouté une petite partie. Quand j'utilise les fichiers sources déjà compiler ( avec Eclipse par l'ancien stagiaire) le code se lance aucun problème. Par contre si je reprend les mêmes fichiers sources, je crée un nouveau projet sur Eclipse, j'ai l'erreur std ::bad alloc . Magique non !! . Pour l'instant j'ai encore rien ajouté. Donc le code il fonctionne, si je recompile il marche plus. Je comprends plus rien

    Si vous avez une solution pour moi je vous serais très reconnaissante, ou un moyen de trouver quelle variable est surchargé (si c'est bien ca le problème), j'ai cherché un peu et apparemment c'est un problème de mémoire.

    PS: Je ne maitrise pas beaucoup la programmation.

    Merci

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    std::bad_alloc est effectivement une erreur liée à de l'allocation dynamique de mémoire. Voir http://en.cppreference.com/w/cpp/memory/new/bad_alloc

    Si tu utilises les mêmes fichiers sources dans un autre projet Eclipse, alors la différence provient sans doute des options du projet Eclipse. Il faut les comparer. Pour cela, tu fais un clic-droit sur le projet et tu choisis Propriétés. Il y a dans le menu de gauche 3 catégories pour les options C/C++. La section la plus intéressante est celle-ci :
    Nom : Sans titre.png
Affichages : 1028
Taille : 62,2 Ko

    On est bien d'accord que le projet de l'ancien projet fonctionne quand tu le compiles et que tu l'exécutes sur ton PC ?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Il est déjà compilé. Quand j'utilise son projet sa marche. Si je crée un nouveau projet, je créer les mêmes classes et tout , je copie le code, je recompile, sa ne marche plus.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Son compilé n'est pas forcément celui correspondant au code qu'il a laissé, il a pu changer le code depuis sa dernière compilation.

    Première chose que je te conseille, utilise un outil de gestion de code, comme git (ou subversion). Cela te permettra de ne pas perdre le code initial, de pouvoir y revenir au besoin, etc.
    Une fois fait, essaye d'ouvrir son ancien projet eclipse, et de recompiler.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 5
    Points : 7
    Points
    7
    Par défaut erreur: std () bad_alloc
    Bonjour,

    j'ai pu trouvé ou exactement j'ai l'erreur grâce à des cout mais je ne sais pas comment la corriger. Voici la fonction en question:

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    void Fastener::readName(std::string line){
    	// Remove eventual spaces in fastener name
    	for (size_t n = 0; n < line.size(); n++){
    		if(line[n] == ' '){
    			line.erase(n,1);
    		}
    	}
    	// Extraction of "Name" attributes
    	vector<string> infoName;
     
     
     
     
    	int curs1=0, curs2=0, lp=line.size()+1;
    	string sep("//"); // Select the separator in fastener name
    	while (curs2+ sep.size() != lp ){
    		curs2=line.find(sep, curs1);
    		if(curs2!=-1){
    			infoName.push_back(line.substr(curs1,curs2-curs1));
    			curs1 = curs2 + sep.size();
    			curs2 = curs1;
     
    		}
    		else {
    			infoName.push_back(line.substr(curs1));
    			curs2=lp;
    		}
    	}
    	if (infoName.size()==7){ // The name format is groupName_type_dF_standardBolt_standardNut_th1_th2
    		double currentdF = atof(infoName[2].c_str()); // atof function converts a string to a double
    		double currentth1 = atof(infoName[5].c_str());
    		double currentth2 = atof(infoName[6].c_str());
     
    		groupName = infoName[0];
    		type = infoName[1];
    		dF = currentdF;
    		standardBolt = infoName[3];
    		standardNut = infoName[4];
    		th1 = currentth1;
    		th2 = currentth2;
    	}
    	if (infoName.size()==9){ // The name format is groupName_type_dF_standardBolt_standardNut_th1_mat1_th2_mat2
    		double currentdF = atof(infoName[2].c_str());
    		double currentth1 = atof(infoName[5].c_str());
    		double currentth2 = atof(infoName[7].c_str());
     
    		groupName = infoName[0];
    		type = infoName[1];
    		dF = currentdF;
    		standardBolt = infoName[3];
    		standardNut = infoName[4];
    		th1 = currentth1;
    		mat1 = infoName[6];
    		th2 = currentth2;
    		mat2 = infoName[8];
    	}
    	if (infoName.size()==10)
            {
            double currentdF = atof(infoName[2].c_str()); // atof function converts a string to a double
            double currentth1 = atof(infoName[5].c_str());
            double currentth2 = atof(infoName[7].c_str());
    		groupName = infoName[0];
    		type = infoName[1];
    		dF= currentdF;
            standardBolt = infoName[3];
            standardNut = infoName[4];
            th1= currentth1;
            mat1 = infoName[6];
            th2= currentth2;
            mat2 = infoName[8];
            if (infoName[9] == "Unsupported" || infoName[9] == "Supported")
                {
                SupportedOrUnsupported = infoName[9];
                }
             else
                   {
                     rivet= infoName[9];
                     SupportedOrUnsupported = "Unsupported";
                   }
            }
        if (infoName.size() == 11)
        {
     
            double currentdF = atof(infoName[2].c_str()); // atof function converts a string to a double
            double currentth1 = atof(infoName[5].c_str());
            double currentth2 = atof(infoName[7].c_str());
    		groupName = infoName[0];
    		type = infoName[1];
    		dF= currentdF;
            standardBolt = infoName[3];
            standardNut = infoName[4];
            th1= currentth1;
            mat1 = infoName[6];
            th2= currentth2;
            mat2 = infoName[8];
            rivet= infoName[9];
            SupportedOrUnsupported = infoName[10];
     
        }
    	if ((infoName.size() != 7) && (infoName.size() != 9)&& (infoName.size() != 10)&& (infoName.size() != 11)) {
    		groupName = infoName[0]; // Extract groupName attribute if format name is incorrect (or whole name if there is no separator)
    	}
    }
    J'ai une ligne sous la forme de : groupName // type // dF // standardBolt // standardNut // th1 // mat1 // th2 ........
    Le bad alloc vient du faite que je ne peux pas extraire ces paramètres je pense, car si je les rentre en brute sa marche.
    Si vous pouvez m'aider, je vous serais tres reconnaissante. Merci

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ta boucle de séparation en morceaux (split) me semble foireuse.
    As-tu essayé de regarder le contenu de infoName à sa sortie?

    Et comme séparer une chaine selon un séparateur est une tache que tu peux nommer, fais-en une fonction.
    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
    vector<string> split(std::string const& line, std::string const& separator) {
        vector<string> tokens;
     
        string::size_type current_index = 0;
     
        while (auto next_separator_index = line.find(sep, current_index) != string::npos) {
            tokens.push_back(line.substr(current_index, next_separator_index - current_index));
            current_index = next_separator_index + separator.size();
        }
     
        if (current_index < line.size()) {
            tokens.push_back(line.substr(current_index));
        }
     
        return tokens;
    }
    J'irai plus loin en disant que ca doit même exister
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

Discussions similaires

  1. Matrice cpp std::bad alloc OpenCV
    Par Disdoh dans le forum Langage
    Réponses: 1
    Dernier message: 25/03/2013, 21h35
  2. Error: (car) bad argument type
    Par Neuromancien2 dans le forum Scheme
    Réponses: 1
    Dernier message: 12/06/2011, 11h35
  3. Windows / GLib-ERROR : Failed to allocate X bytes
    Par b3nou dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 09/10/2009, 14h38
  4. Axis2 Error 400 Bad Request
    Par Calahad dans le forum Services Web
    Réponses: 2
    Dernier message: 11/04/2007, 13h32
  5. bad class file error , tomcat 5.0.28, jre 1.5.0_06
    Par websurfeur dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 02/06/2006, 22h01

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