Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programme et windows

Message d'erreur

Sujet résolu
    6 juin 2007 à 11:10:28

    Salut tout le monde.

    En fait, je voulais savoir, qu'elles étaient les causes le plus fréquentes du message d'erreur windows:
    "console.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."
    Cela m'arrive souvent, et j'avoue que c'est un peus énervent quand on ne sais même pas pourquoi son programme ne marche pas... :colere2:
    • Partager sur Facebook
    • Partager sur Twitter
      6 juin 2007 à 11:36:55

      Generalement c' est un acces en memoire non autorisé !

      Apres une allocation dynamique verifie toujours que ton pointeur n' est pas null , n' essais pas d' acceder a une variable qui a deja été libérée. Depasse pas la capacité de tes tableaux alloués statiquement !!
      • Partager sur Facebook
      • Partager sur Twitter
        6 juin 2007 à 11:50:57

        On pourrait avoir le code, je pense a un "core dumped"...on pourrait t'aider comme sa ^^
        • Partager sur Facebook
        • Partager sur Twitter
          6 juin 2007 à 13:16:20

          Voici mon code source (je l'ai un petit peus arrangé mais le problème reste le même):
          #include <iostream>
          #include <string>
          using namespace std;

          void init(string *Tab, long a);
          void affiche(string *Tab, long a);
           void remplirTab(string *Tab, string* Message, long a);

          int main()
          {
              long Nombre;
              string* Tab;
              string* Message;
              cout<<"Rentrer le nombre de message que vous voulez mettre"<<endl;
              cin>>Nombre;

              Tab=new string[Nombre];
              Message= new string[Nombre];

              init(Tab, Nombre);


              cout<<endl<<endl;
              system("PAUSE");

              for(int i=0; i<=Nombre; i++)
              {
              cout<<"Rentrer message"<<i<<endl;
              cin>>Message[i];
              }

              remplirTab(Tab, Message, Nombre);


              affiche(Tab, Nombre);


              cout<<endl<<endl;
              system("PAUSE");

              delete[]Tab;
              delete[]Message;
              return 0;
          }

          void init(string *Tab, long a)
          {
              for(int i=0; i<=a; i++)
              {
                  Tab[i]="";
              }
          }

           void affiche(string *Tab, long a)
           {
               for(int i=0; i<=a; i++)
               {
                   cout<<Tab[i]<<endl;
               }
           }

           void remplirTab(string *Tab, string *Message, long a)
           {
               for(int i=0; i<=a; i++)
               {
                   Tab[i]=Message[i];
               }
           }

          Apparemment c'est init qui fait tout fouarrer parce que le message d'erreur s'affiche avant le premier "system("PAUSE");".
          • Partager sur Facebook
          • Partager sur Twitter
            6 juin 2007 à 13:40:30


                for(int i=0; i<=a; i++)
                {
                    Tab[i]="";
                }

            Et on comprend pourquoi.
            Je suppose que a est la taille du tableau (pas détaillé le reste du code, désolé). Du coup, tu parcours tout le tableau des indices 0 à a. Et comme Tab[a] n'existe pas alors que tu essayes de le modifier : seg fault (accès non autorisé en mémoire justement).
            Les indices d'un tableau vont de 0 à (a-1). Il faudrait donc que tu modifies la condition de ton for.
            • Partager sur Facebook
            • Partager sur Twitter
            J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
              6 juin 2007 à 13:44:02

              Erreurs bête :
              Je prends un exemple pour que tu vois l'erreur :

              je dis vouloir rentrer 2 message. La première boucle que je rencontre est ainsi :

                  for(int i=0; i<=2; i++)
                  {
                      Tab[i]="";
                  }


              i=0, puis i=1, puis i=3; 3 messages. Seulement dans ton message = new string[nombre] tu n'as alloué que 2 message (je sais pas si on peut le dire comme ca o_O )

              Voilà, en clair : vire tous tes "i<=a" et remplace par "i<a" ;)
              • Partager sur Facebook
              • Partager sur Twitter
                7 juin 2007 à 13:33:30

                ok.

                Merci pour toute vos réponse
                • Partager sur Facebook
                • Partager sur Twitter

                Programme et windows

                × 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