Accueil > Forum > > > > Plantage lors de l'exécution !
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
|
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
|
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 /
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|