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 :

Erreur à la sortie du programme


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut Erreur à la sortie du programme
    Bonjour,

    J'ai un petit problème lors de l'exécution de mon programme : à la fin de celui ci j'ai un message d'erreur (cf. image "erreur2.jpg").

    Mon programme est structuré comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    int main(void)
    {
    	// nom du fichier d'origine
    	char nomFichO[20] = "";
    	
    	
    	/***** Partie recuperation des donnes du fichier d'origine *****/
    	
    	cout << "Veuillez saisir le nom du fichier d'origine : ";
    	cin >> nomFichO;
    	
    	
    	// ouverture du fichier en lecture
    	std::ifstream monFichier(nomFichO);
    	
    	
    	// test l'existance du fichier
    	if(is_readable(nomFichO) != 0){
    		// test l'ouverture fu fichier
    		// si tous les tests sont OK
    		if(monFichier){
    			// creation de l'objet
    			Bordereau monBordereau;
    
    			// nom du nouveau fichier
    			char nomFichN[20] = "";
    
    			int nbDestinataire = 0;
    			
    			
    			// lecture du fichier ligne par ligne et recuperation des infos
    			lectureFichOrigine(monFichier, &monBordereau);
    			
    			// recupere nombre de destinataires enregistres
    			nbDestinataire = monBordereau.conteneurDest.size();
    			
    			
    			/***** Partie creation du nouveau fichier avec les donnees recuperees *****/
    			
    			cout << "\nVeuillez saisir le nom du nouveau fichier : ";
    			cin >> nomFichN;
    			
    			// création du nouveau fichier
    			std::ofstream nouvFich(nomFichN, ios::trunc);
    			
    			
    			// ecriture des informations recuperees dans le nouveau fichier
    			ecriture(nouvFich, &monBordereau, nbDestinataire);
    			
    			// fermeture du fichier
    			nouvFich.close();
    			
    			
    			/***** FICHIER PRET A ETRE UTILISE *****/
    			
    			// suppression des variables
    			monBordereau.~Bordereau();
    		}ERREUR (cf. image "erreur.jpg")
    		else{
    			// si le nom de fichier est incorrect
    			// ou si le fichier n'est pas accessible en lecture
    			system("cls");
    			cout << "Erreur a l'ouverture du fichier :" << endl;
    			cout << "nom de fichier incorrect ou interdit en lecture !!!" << endl;
    			main();
    		}
    	}
    	// si le fichier n'existe pas
    	else{
    		system("cls");
    		cout << "Erreur a l'ouverture du fichier : fichier introuvable !!!" << endl;
    		main();
    	}
    	
    	// fermeture du fichier d'origine
    	monFichier.close();
    	
    	
    	return 0;
    }
    En mode debug, j'ai vu que l'erreur se situe au moment de sortir de 2ème if.
    Mais je vois pas ce qui bloque

    Si vous avez une idée, elle est la bienvenue

    Merci

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Euh... Pourquoi appelles-tu explicitement le destructeur ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut
    C'était un test pour voir si ca pouvait résoudre mon problème.
    Mais ca ne change rien qu'il y soit ou pas

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Je ne pense pas que quiquonque puisse t'aider sans voir cette fameuse classe Bordereau...

    Tu as essayé d'utiliser le debugger DANS le destructeur, pour voir quelle partie de celui-ci plante ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut
    Classe Bordereau :

    fichier .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #ifndef _BORDEREAU_H_
    #define _BORDEREAU_H_
     
    #include <iostream.h>
    #include <string>
    #include <vector>
     
    #include "emetteur.h"
    #include "destinataire.h"
     
    /***********************************\
    * un bordereau est composé :
    *       - d'un emmetteur
    *       - d'une liste de destinataires
    *       - de la date d'execution
    *       - de la devise
    *       - du montant total
    \***********************************/
     
     
    class Emetteur;
    class Destinataire;
     
     
    class Bordereau
    {
    private:
    	std::string date;
    	std::string devise;
    	std::string montantTotal;
     
    public:
    	std::vector<Destinataire> conteneurDest;
    	std::vector<Destinataire>::iterator itDest;
     
    	std::vector<Emetteur> conteneurEm;
    	std::vector<Emetteur>::iterator itEm;
     
    	Emetteur theEmetteur;
    	Destinataire theDestinataire;
     
    	Bordereau();
    	~Bordereau();
     
    	// assesseurs et mutateurs des attributs de la classe
    	const std::string get_date() const;
    	void set_date(std::string value);
     
    	const std::string get_devise() const;
    	void set_devise(std::string value);
     
    	const std::string get_montantTotal() const;
    	void set_montantTotal(std::string value);
     
    };
     
     
    #endif // _BORDEREAU_H_
    fichier .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include "bordereau.h"
    #include "operateur.h"
     
     
     
    // constructeur par défaut
    Bordereau::Bordereau(){
    	set_date("");
    	set_devise("");
    	set_montantTotal("");
    }
     
    // destructeur
    Bordereau::~Bordereau(){
    }
     
     
    //assesseur et mutateur de l'attribut date
    const std::string Bordereau::get_date() const{
    	return date;
    }
     
    void Bordereau::set_date(std::string value){
    	date = value;
    	return;
    }
     
     
    //assesseur et mutateur de l'attribut devise
    const std::string Bordereau::get_devise() const{
    	return devise;
    }
     
    void Bordereau::set_devise(std::string value){
    	devise = value;
    	return;
    }
     
     
    //assesseur et mutateur de l'attribut montantTotal
    const std::string Bordereau::get_montantTotal() const{
    	return montantTotal;
    }
     
    void Bordereau::set_montantTotal(std::string value){
    	montantTotal = value;
    	return;
    }
    Le destructeur passe bien, j'ai une erreur au moment de passer l'accolade de sortie du if.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Ah, dans ce cas, tu peux retirer la classe Borderaux. C'est un autre élément qui est mal détruit. (Enfin, teste en retirant l'appel explicite au destructeur d'abord, des fois que le compilo nous tente une double destruction...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur au lancement du programme
    Par tazamorte dans le forum MFC
    Réponses: 4
    Dernier message: 08/09/2006, 18h41
  2. petit problème de sortie de programme
    Par clampin dans le forum C
    Réponses: 2
    Dernier message: 17/06/2006, 11h51
  3. Delphi 2005 Indy 9 Erreur au lancement du programme
    Par Houben Jacques dans le forum Web & réseau
    Réponses: 4
    Dernier message: 08/11/2005, 12h05
  4. TExcelApplication : erreur en quittant le programme
    Par Bleuarff dans le forum Composants VCL
    Réponses: 6
    Dernier message: 09/09/2005, 14h21
  5. Delphi 2005 : Erreur de compilation du programme
    Par bigbestboy dans le forum Langage
    Réponses: 6
    Dernier message: 03/08/2005, 18h14

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