Partage
  • Partager sur Facebook
  • Partager sur Twitter

un resize d'un vector = crash?

Sujet résolu
    29 juillet 2007 à 22:11:06

    bonjour,

    voilà, je vais tenter de bien expliquer mon problème :

    j'ai une classe, nommé Fenetre, qui ne plante pas quand je l'utilise (que je vais montrer ici en le simplifiant un peu(beaucoup(même trop, j'imagine))) :


    #ifndef FENETRE_MD
            #define FENETRE_MD

            ....

            using namespace std;

            class Fenetre {
                    public:

                            Fenetre();
                            Fenetre(....);
                            ~Fenetre();

                            ........

                    private:
                            ....
            };

    #endif
     


    bon. ensuite, quelque part d'autre, dans une autre classe jai ceci :


    vector<Fenetre> m_fen;
    ....
    m_fen.resize(m_fen.size()+1);
     

    or, après quelque minutes de débuggage, j'ai remarqué que le programme plantait directement sur la ligne "m_fen.resize(m_fen.size()+1);" ... je comprend pas, j'ai plusieurs autres "resize" avant et ils marchent 100%, sauf lui...

    s'il vous plaît, pouvez-vous m'aider? :(
    • Partager sur Facebook
    • Partager sur Twitter
    Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
      29 juillet 2007 à 23:58:08


      vector<Fenetre> m_fen;
      ....
      m_fen.resize(m_fen.size()+1);
       


      Ton probleme vient surement des "...." dont tu parles, qui te semblent insignifiants mais...
      Si tu as un débordement, a un moment ou un autre, au niveau de m_fen, alors il est tres possible qu'un resize ( <=> un new + un delete finalement) crache.

      Vérifie que tu ne débordes pas.
      • Partager sur Facebook
      • Partager sur Twitter

      Notre entreprise recrute, contactez moi en MP. (CDI, Bac+5, Lyon, C++, math, décodage binaire, conversions de modèles 2D/3D...)

        30 juillet 2007 à 0:26:13

        hmm.. pourtant, je n'ai aucunement touché à m_fen avant la ligne qui crash (qui n'est pas dans une boucle ou quoi que ce soit d'équivalent; d'ailleur, j'utilise un semblant du même code pour d'autre classe, et ça marche bien...)

        je vais faire un peu de recherche, tant qu'à ne pas trop savoir quoi faire...
        • Partager sur Facebook
        • Partager sur Twitter
        Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
          30 juillet 2007 à 0:54:10

          Tu es sûr que tes fenêtres sont correctement copiables ?
          • Partager sur Facebook
          • Partager sur Twitter
          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
            30 juillet 2007 à 1:33:16

            je croit bien que oui. quoique, si tu pourrait me dire ce qu'est pour toi une classe étant "correctement" copiable, ça m'aiderais peut-être ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
              30 juillet 2007 à 3:58:33

              Tu as essayé de faire un reserve?
              • Partager sur Facebook
              • Partager sur Twitter
                30 juillet 2007 à 4:28:27

                oui, j'ai essayé : ça marche partiellement, et si je fait un autre reserve après, ça plante. :(
                • Partager sur Facebook
                • Partager sur Twitter
                Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
                  30 juillet 2007 à 4:35:18

                  Faudrait peut-être nous montrer plus de code dans ce cas, parce que je ne vois pas pourquoi un deux reserve de suite crasherais.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 juillet 2007 à 7:09:54

                    Bonjour,

                    Vérifie la valeur que renvoie m_fen.size(), et si tu pouvais nous paster tout le code (sans les ...) ca serait plus facile pour nous de t'aider :)

                    merci,
                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 juillet 2007 à 9:36:46

                      Il faut dupliquer les resources brutes gérées par la classe dans le constructeur de copie et l'opérateur d'affectation.
                      Sinon risque de double libération d'une même ressource dans le destructeur. cf le tuto qui ne parle que de ça.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                        31 juillet 2007 à 2:24:30

                        ahh ouais, j'ai fait un constructeur de copie, et ça semble marcher :D

                        (arf, et c'était le seul chapitre que j'avais zappé :-° )

                        merci !
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
                          31 juillet 2007 à 9:19:37

                          Un des plus importants ...
                          :p
                          • Partager sur Facebook
                          • Partager sur Twitter
                          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                          un resize d'un vector = crash?

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown