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 :

Run-Time Check Failure : Stack corrupted


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut Run-Time Check Failure : Stack corrupted
    Bonjour,

    voilà, j'ai un ptit souci avec mon appli que je suis en train de développer en C++, sous visual studio 2003.

    ça compile bien,
    mais en cours d'exécution, à un moment,
    j'ai une erreur :
    Run-Time Check Failure #2 - Stack around the variable 'mess' was corrupted
    Je vois à peu près d'où, ça vient
    mais je sais pas trop comment le résoudre...

    Voilà comment ça se présente :

    j'ai une structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct Message {
        int longueur;
        char *data;
        }
    j'ai une variable statique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static vector<Message> fileAttente;
    et voici ce que je fais dans une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Message mess;
     
    CreerMessage(&mess);    // appel à une méthode qui me permet d'élaborer mon message
     
    // je place mon message dans la file d'attente...
    fileAttente.push_back(mess);
     
    // j'envoie le message...
    EnvoyerMessage();
    Ma méthode 'EnvoyerMessage' se charge d'envoyer les messages qui sont dans la file d'attente
    elle les supprime de la file d'attente une fois qu'ils sont envoyés...

    Voici donc, je pense le point du problème...

    Donc comment je dois m'y prendre pour faire ça correctement??...

    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    Run-Time Check Failure #2 - Stack around the variable 'mess' was corrupted
    ca arrive quand?
    dans cette methode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fileAttente.push_back(mess);
    ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    Non,

    en fait, tout ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Message mess;
     
    CreerMessage(&mess);    // appel à une méthode qui me permet d'élaborer mon message
     
    // je place mon message dans la file d'attente...
    fileAttente.push_back(mess);
     
    // j'envoie le message...
    EnvoyerMessage();
    est dans une même méthode
    et c'est en sortant de cette méthode que l'erreur tombe...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Peut être que la pile est corrompue parce que quelqu'un jardine en dehors de ses plate bandes.

    Que fait le constructeur de mess, que fait la fonction CreerMessage(), que fait le constructeur de copie de Message, que fait la fonction EnvoyerMessage()
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    Il n'y a pas de constructeur pour Message

    La méthode CreerMessage affecte une valeur aux champs de la structure...
    Et EnvoyerMessage envoie les messages qui sont dans la file d'attente et les supprime ensuite de la liste (avec un fileAttente.erase )
    je pense que c'est le fait de supprimer le message de la file d'attente qui fait péter l'erreur
    nan?

  6. #6
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    Est-ce que tu pourrais nous montrer plus de code, comme la définition complète de la struct Message, CreerMessage() et EnvoyerMessage() ?

    Personellement, je commencerais pas modifier la struct Message en la remplacant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct Message
    { 
       std::vector<char> data; // si c'est ce n'est pas du texte
       // ou 
       std::string data; // si c'est du texte.
    };
    justement, pour m'épargner ce genre d'ennui.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Bonjour,
    Est-ce que tu pourrais nous montrer plus de code, comme la définition complète de la struct Message, CreerMessage() et EnvoyerMessage() ?

    Personellement, je commencerais pas modifier la struct Message en la remplacant par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct Message
    { 
       std::vector<char> data; // si c'est ce n'est pas du texte
       // ou 
       std::string data; // si c'est du texte.
    };
    justement, pour m'épargner ce genre d'ennui.
    La struct message est complète

    Et justement, j'ai besoin d'un 'char *'
    car le message est destiné à une librairie en C qui attend du char*

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    Et justement, j'ai besoin d'un 'char *'

    ca te donne un const char*

  9. #9
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Citation Envoyé par melleb Voir le message
    La struct message est complète
    C'est un peu ce que je craignais
    Il faudrait voir CreerMessage() et EnvoyerMessage() pour débusquer l'erreur, mais elle est probablement dans une mauvaise utilisation du char* data.

    Si c'est possible, std::vector<char> est réellement la solution la plus simple pour faire un buffer d'octet. La librairie C qui attends un char* peut toujours recevoir &vec[0].

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/02/2009, 11h54
  2. Stack corrupted - Run-Time Check Failure
    Par poukill dans le forum C++
    Réponses: 2
    Dernier message: 16/07/2008, 23h31
  3. probleme avec C++ Run-Time Check Failure #3
    Par acnalbasac dans le forum C++
    Réponses: 3
    Dernier message: 14/04/2007, 14h57
  4. [VC++2005 express]Run-Time Check Failure #2
    Par méphistopheles dans le forum Visual C++
    Réponses: 3
    Dernier message: 19/01/2007, 07h13
  5. Run-Time Check Failure #2
    Par -Mod- dans le forum DirectX
    Réponses: 5
    Dernier message: 10/08/2006, 08h06

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