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 :

plantage dans l'assignation d'une string privée


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut plantage dans l'assignation d'une string privée
    Hello tout le monde, j'ai un plantage relativement chelou dans mon code, sur cette partie la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Analyse_H245 A1;
    A1.setchaine(buffer.str());
    mon objet A1 contient un parametre privé, de telle sorte que l'appel a setchaine s'articule comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void setchaine(std::string entree){chaine_traitement = entree;}
    Simplement, l'appel de cette fonction dans une méthode me renvoie une erreur (non décrite par mon complio Dev-cpp). J'ai bien vérifié que buffer.str() n'était pas vide, je ne vois absolument pas d'où peut provenir cette erreur. Quelqu'un aurait il une idée ?

    Merci pour vos réponses !

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Thordax
    Simplement, l'appel de cette fonction dans une méthode me renvoie une erreur (non décrite par mon complio Dev-cpp).
    Je ne comprend pas ce que tu veux dire par là...

    quel est exactement le comportement du programme ou du compilateur (suivant celui qui plante)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    eh bien au moment ou le programme arrive sur la ligne

    :

    A1.setchaine(buffer.str());

    le programme indique, sous zindoz :

    "prog.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."


  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    quel est le type de chaine_traitement ?
    et celui de buffer ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    apres avoir jeté un oeil sur l'erreur de maniere plus approfondie,

    l'erreur se localise sur la chaine suivante (en gras):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void Analyse_H245::prendrePDUC(int &index){
    int index1 = chaine_traitement.find("PDU Type:", index);
    if(index1 == -1){
        PDU_traitement = chaine_traitement;index = -1;
        }
    int index2 = chaine_traitement.find("PDU Type:", index1+1);
    PDU_traitement = chaine_traitement.substr(index1, index2 - index1);
    index = index2;
    }
    sachant que chaine_traitement et PDU_traitement sont des chaines type privées de la même classe.

    J'ai vérifié les index (index, index1, et index2), ca ne vient pas de la (pas de pointage vers une valeur négative type -1 par exemple).

    La chaine chaine_traitement.substr(index1, index2 - index1) existe bel et bien mais son assignation provoque le plantage du programme !


  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    tu ne dépasse pas la fin de la chaîne non plus ? (bien que je croye que c'est sans conséquences )
    quel est le type de PDU_traitement ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    PDU_traitement est une chaine de caractère string

    apparemment c'est le substr() qui fait tout planter. pourtant même un substr(0,1) plante (chaine de plus de 6000 caractères, donc pas de dépassement).

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    oula... très étrange effectivement...
    un plantage à l'intérieure même de la Librairie Standard... il faudrait mettre les fichiers du compilateur à jour
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  9. #9
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    le plus étrange, c'est que tout fonctionnait hier ...



    need reinstall de dev cpp ?

    y aurait il eu des modifs ?

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    bah... au pire... essaie de faire un reboot puis tout reconstruire...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  11. #11
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    rien n'y fait ... j'ai tout désinstallé réinstallé rebuild ... ayayay je vais essayer avec un autre compilo voir ce qu'il me fait

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ouais, change de compilo

  13. #13
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 59
    Points
    59
    Par défaut
    vu que je n'ai pas d'autre compilo sous la main pour l'instant je me suis penché sur le probleme de substr

    et bizarrement si je modifie la taille de la chaine a récupérer depuis la chaine d'origine (exemple : substr(index1, 4000)), cela fonctionne, jusqu'a une valeur entre 4900 et 4925, est ce logique ? (probleme d'allocation mémoire peut etre ?)

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ce serait étonnant, mais tente de rattraper les exceptions, peut-être que tu te choppes un std::bad_alloc sur un substr.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main()
    {
        try
        {
            // Le code de tout ton ancien main()
        }
        catch(std::exception& E)
        {
            std::cout << E.what() << std::endl;
        }
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/06/2013, 16h42
  2. enregistrement dans un fichier d'une string XSL-FO
    Par titouille dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 05/10/2009, 16h58
  3. [DOM] sauver dans une String
    Par hocinema dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 28/09/2004, 21h44
  4. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

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