begin process at 2012 05 29 16:09:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Plantage lors de l'exécution !


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Plantage lors de l'exécution !

mardi 29 décembre 2009 à 16:43:27 | Plantage lors de l'exécution !

mliuej

Bonjour à tous,

Voici une fonction simple qui est sensée enregistrer un objet "Visiteur" ainsi qu'un objet "BilletEntree", et les afficher tous les deux (pour le moment). Le problème est que ça plante lors de l'exécution : plus précisément lors de la ligne "cin>>n;"... Lorsque je mets cette commande en commentaire, ça plante lors du premier "cin" rencontré.

Voici mon bout de code :

Code C/C++ :
void AchatBillet()
{
    fl<<"Achat d'un billet";
        
    system("cls");
    char *n=new char[50], *p=new char[50], *dn=new char[50], *nv=new char[50], *nb=new char[50], *db=new char[50];

    cout<<endl<<"Achat d'un nouveau billet : ";
    cout<<endl<<"----------------------------"<<endl<<endl;
    
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    
    cout<<"Veuillez entrer le nom du visiteur : ";
    cin>>n;
    cout<<"Veuillez entrer le prenom du visiteur: ";
    cin>>p;
    cout<<"Veuillez entrer la date de naissance du visiteur: ";
    cin>>dn;
    cout<<"Veuillez entrer le numero du visiteur : ";
    cin>>nv;
    cout<<"Merci !"<<endl<<endl;

    Visiteur v1(n, p, dn, nv);
    v1.affiche();

    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    
    cout<<"Veuillez entrer le numero du billet : ";
    cin>>nb;    
    cout<<"Veuillez entrer la date de validite du billet : ";
    cin>>db;    
    cout<<"Merci !"<<endl<<endl;
    
    BilletEntree _be(v1, nb, db);
    _be.affichage();
    
    system("PAUSE");
}


En principe les constructeurs sont bons (et de toute façon le problème ne se situe pas là) mais je vous les montre tout de même :

Code C/C++ :
Visiteur::Visiteur(char *nom, char *prenom, char *datenaissance, char *numerovisiteur) : Personne (nom, prenom, datenaissance)
{
    NumeroVisiteur = new char [strlen(numerovisiteur)+1];
    setNumeroVisiteur(numerovisiteur);
}


Code C/C++ :
BilletEntree::BilletEntree(Visiteur v, char* numB, char* dateB)
{
    setnumeroBillet(numB);
    setdateBillet(dateB);
    setnomVisiteur(v.getNom());
    setprenomVisiteur(v.getPrenom());                                 
}


Bonne soirée !
mercredi 30 décembre 2009 à 11:45:52 | Re : Plantage lors de l'exécution !

CptPingu

Administrateur CodeS-SourceS
Je n'ai pas regardé en détail ce qui n'allait pas, mais une chose est sûre:
Arrête d'utiliser des char* !!! Tu as des std::string, bien meilleurs (ils gèrent leur taille tous seul, et sont capable de réaliser bien plus d'opérations).

Commence par remplacer:
Code C/C++ :
char *n=new char[50], *p=new char[50], *dn=new char[50], *nv=new char[50], *nb=new char[50], *db=new char[50];


Par
Code C/C++ :
std::string n;
std::string p;
std::string dn;
std::string nv;
std::string nb;
std::string db;


Une fois que tu as remplacé tout tes char* par des std::string, tu ne devrais plus avoir le problème. S'il persiste, reposte ici et je t'aiderais.

Evite les appels à "system". C'est un peu dommage d'avoir une très bonne approche pour faire une pause, et d'appeler ensuite system("pause");

Je te conseille d'utiliser la fonction suivante:
Code C/C++ :
void pause()
{
  cin.clear();
  cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

mercredi 30 décembre 2009 à 12:33:33 | Re : Plantage lors de l'exécution !

mliuej

Merci pour ta réponse. J'ai remplacé les char* par les string mais le programme plante toujours. Voici mes bouts de code :

Code C/C++ :
void AchatBillet()
{
    fl<<"Achat d'un billet";
        
    system("cls");
    string n, p, dn, nv;

    cout<<endl<<"Achat d'un nouveau billet : ";
    cout<<endl<<"----------------------------"<<endl<<endl;
    
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    
    cout<<"Veuillez entrer le nom du visiteur : ";
    cin>>n;
    cout<<"Veuillez entrer le prenom du visiteur: ";
    cin>>p;
    cout<<"Veuillez entrer la date de naissance du visiteur: ";
    cin>>dn;
    cout<<"Veuillez entrer le numero du visiteur : ";
    cin>>nv;
    cout<<"Merci !"<<endl<<endl;

    Visiteur v1(n, p, dn, nv);
    v1.affiche();

    pause();
}


Code C/C++ :
Visiteur::Visiteur(string n, string p, string dn, string nv) : Personne(no, pr, da)
{
    numvis = nv;
}


Code C/C++ :
Personne::Personne (string n, string p, string d)
{
    no = n;
    pr = p;
    da = d;
}


J'ai remplacé mes system("PAUSE") par ta fonction pause(), mais elle n'a pas le même effet puisqu'aucune pause n'est réalisée
mercredi 30 décembre 2009 à 12:37:00 | Re : Plantage lors de l'exécution !

mliuej

Désolé pour le double post mais je n'ai pas trouvé la fonction "éditer".

Je précise que le programme plante juste après avoir dit "Merci !", donc au moment de créer l'objet Visiteur (j'ai essayé de mettre la fonction affiche en commentaire, mais ça plante bien au moment de créer le Visiteur).

Seconde remarque, j'utilise toujours pour le moment using namespace std, je modifierai ça sous peu
mercredi 30 décembre 2009 à 12:46:05 | Re : Plantage lors de l'exécution !

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Je pense que ça vient du constructeur de Visiteur.
Tu appelles des éléments qui devraient être appelés uniquement par le constructeur de Personne.

Visiteur::Visiteur(string n, string p, string dn, string nv) : Personne(no, pr, da)



Ici no, pr et da, non pas à être appelé.

Visiteur::Visiteur(string n, string p, string dn, string nv) : Personne(n, p, dn)



Serait préférable.

J'arrive à le faire fonctionner avec ceci:

Code C/C++ :
#include <iostream>

class Personne
{
public:
  Personne (const std::string& n, const std::string& p, const std::string& d)
    : no(n), pr(p), da(d)
  {
  }
private:
  std::string no;
  std::string pr;
  std::string da;
};

class Visiteur : public Personne
{
public:
  Visiteur(const std::string& n, const std::string& p,
	   const std::string& dn, const std::string& nv)
    : Personne(n, p, dn), numvis(nv)
  {
  }
private:
  std::string numvis;
};

void AchatBillet()
{
  using std::string;
  using std::cin;
  using std::cout;
  using std::endl;

//   fl<<"Achat d'un billet";

  string n, p, dn, nv;

  cout<<endl<<"Achat d'un nouveau billet : ";
  cout<<endl<<"----------------------------"<<endl<<endl;

//   pause();

  cout<<"Veuillez entrer le nom du visiteur : ";
  cin>>n;
  cout<<"Veuillez entrer le prenom du visiteur: ";
  cin>>p;
  cout<<"Veuillez entrer la date de naissance du visiteur: ";
  cin>>dn;
  cout<<"Veuillez entrer le numero du visiteur : ";
  cin>>nv;
  cout<<"Merci !"<<endl<<endl;

  Visiteur v1(n, p, dn, nv);
//   v1.affiche();

//   pause();
}

int main()
{
  AchatBillet();
  return 0;
}
mercredi 30 décembre 2009 à 13:29:54 | Re : Plantage lors de l'exécution !

mliuej

Merci pour ta réponse, ça fonctionne maintenant. Je vais remplacer tous les char* de mon projet par des string

A bientôt pour d'autres questions


Cette discussion est classée dans : code, char, cout, visiteur, billetentree


Répondre à ce message

Sujets en rapport avec ce message

Destructeur intempestif [ par mliuej ] Bonsoir, J'ai un nouveau problème dans mon application : lorsque je crée un objet, plusieurs destructeurs s'enclenchent sans que j'en aie donné l'ins convertsion int en unsigned char [ par avg ] Salut tout le monde j'ai une souci pour convertir un int en unsigned char[] voir le code c++ qui affiche l'erreur [code=cpp]int a=100; unsigned char Jeux de caractères : MBCS/char* [ par rt15 ] Salut,Prenons le code suivant, qui affiche ce qu'il y a après le dernier \ de la chaîne :void test(){  char* lpPath = "c:\\toto";  char* lpCurrent;  c pointer sur unsigned char [ par avg ] Bonjour à tous je veut appeler une méthode qui n'est pas la mienne mais j'ai sa documentation qui contient titre de méthode et ses paramètres. Mon pro gestion d'un cinéma [ par rouday55 ] Bonsoir bonsoir ! Je suis novice en langage c, je m'y suis mis depuis début novembre et j'ai quelques lacunes dans la résolution de mon problème. En f Vecteur de pointeur de char [ par noname001 ] Bonsoir à tous. J'ai un petit soucis avec un vecteur de pointeur de char. Voici premièrement sa déclaration [code=cpp] char *mots_cles[MAX_MOTS_CLES [C++] Violation d'accès lors de la lecture de l'emplacement 0xfdfdfdfd. [ par 3Fred9 ] Bonjour, J'ai changé de compilateur de Visual C++ 6 à Visual Studio 2005 et depuis j'ai une fonction qui plante à l'exécution par une violation d'acc SQLCHAR en char [ par jerem3000 ] Bonjours, Je développe actuellement un petit logiciel qui accède a une base de donnée accès. Le problème est que je récupère les donnée de la base av comment gerer ce projet pour que deux etudiants n'aient pas le meme code [ par desco182 ] Salut a tous j'aimerais bien que quelqu'un m'aide .#include#include#include#ifndef ETUDIANT_H#define ETUDIANT_Hclass etudiant{int code;<br /


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales