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 :

Exception std::length_error incomprehensible


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 13
    Par défaut Exception std::length_error incomprehensible
    Bonjour,

    Lors de l’exécution de mon code, cette erreur apparaît :
    terminate called after throwing an instance of 'std::length_error'
    what(): vector::_M_fill_insert
    Au début le code marchait, mais impossible de savoir quel modification a provoqué cela. De plus le déboggueur m'aide pas vraiement. Il me dit juste que ça vient de la ligne ci-dessous, mais je comprend pas ce qui produit l'exception et comment résoudre ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cppdb::result rtotal = db << "SELECT COUNT(" + columns + ") AS total FROM " + argv[ARG_TABLE] << cppdb::row;
    Merci d'avances pour vos réponses !

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    plutot que des '+', utilise des '<<', en raison des priorités...
    quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cppdb::result rtotal = db << "SELECT COUNT(" << columns << ") AS total FROM " << argv[ARG_TABLE] << cppdb::row;
    Si l'erreur persiste, c'est soit un problème de logique de base de données, soit une "juste après l'erreur", auquel cas, vérifie les lignes précédentes.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 13
    Par défaut
    Je peux pas utiliser << car la bibliothèque le traite différemment de +.

    Dans la bibilothèque, << sert à spécifier des valeurs dans la requête. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db << "UPDATE ma_table SET value2 = ? WHERE id = ?" << value2 << id << cppdb::exec;
    Sinon, j'ai vérifier les lignes au dessus, aucune erreur apparement

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Dans ce cas, mets des parenthèses autour de la construction de la chaine, et plonge dans ta documentation pour savoir dans quelles conditions cette exception peut être lancée.

    Autre possibilité d'investigation, divise la ligne en deux.
    Si tu es en C++11, c'est très facile, sinon, il faudra chercher quel est le type intermédiaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    auto bidule = db << ("SELECT COUNT(" + columns + ") AS total FROM " + argv[ARG_TABLE]);
    cppdb::result rtotal = bidule << cppdb::row;

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 13
    Par défaut
    J'ai testé en divisant la ligne en deux, ça a bien l'air d'être l’exécution de la requête qui pose problème.

    Pourtant, en exécutant la même requête dans outil graphique, ça marche sans problèmes ...

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    c'est que tu n'a pas codé pas ce que tu crois.

    Vérifie tes arguments.

    tout particulièrement argv[ARG_TABLE] et columns

Discussions similaires

  1. Besoin d'aide avec Exception std::bad_alloc
    Par YohDono dans le forum C++
    Réponses: 2
    Dernier message: 18/05/2013, 18h40
  2. Réponses: 7
    Dernier message: 18/11/2008, 09h12
  3. Réponses: 7
    Dernier message: 03/10/2008, 20h16
  4. std::bad_alloc Exception projet VCL
    Par mickyoun dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/10/2007, 17h48
  5. [vb.net][exception] erreur incomprehensible
    Par arnolem dans le forum Windows Forms
    Réponses: 8
    Dernier message: 05/01/2006, 14h33

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