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 :

access violation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Par défaut access violation
    slt !

    J'ai un accés violation , que je n'arrive pas à capter ! ( je sais même pas pourquoi il me le mets , mais je bafouille un peu)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void enregistrement_fichier(Pays p[],int cmp)
    {
    	ofstream SortieFichierPays("donnees_bis.dat",ios::app);
     
    	if(!SortieFichierPays)
    	{
    		cerr<<" Ouverture du fichier impossible "<<endl;
    		exit(1);
    	}
    	SortieFichierPays<< p[cmp].p_nom_pays <<' '<<p[cmp].p_continent <<' '<< p[cmp].p_nb_population <<'\n';
    }
    voici la fonction appelante :

    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
     
    void saisie_donnees(Pays str_p[])
    {		
     
    	int rep;
    	bool saisir_encore=true;
    	while(saisir_encore==true)
    	{
    		cout<<" nom du pays :\n";
    		cin>>str_p[compteur].p_nom_pays;
    		cout<<" continent :\n";
    		cin>>str_p[compteur].p_continent;
    		cout<<" nombre de sa population :\n";
    		cin>>str_p[compteur].p_nb_population;
    		cout<<"le taux d'analphabetes :\n";
    		cin>>str_p[compteur].p_taux_analphabete;
    		cout<<"le pourcentage d'universitaires \n";
    		cin>>str_p[compteur].p_pourcentage_universitaires;
    		cout" pbn ? \n";
    		cin>>str_p[compteur].p_pbn;
    		cout<<" voulez vous ajouter un pays ? 0/non 1/oui ";
    		cin>>rep;
    		enregistrement_fichier(str_p,compteur); // on enregistre le tout dans un fichier
    		if(rep==1)
    			compteur++;
    		else if(rep==0) 
    			saisir_encore = false;
    	}
     
     
    }
    ( en fait je veux une copie en mémoire , sinon il est clair que l'utilisation d'un tableau de struct est inutile )

    et voilà ma structure pays :

    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
     
    typedef struct 
    {
    	string p_nom_pays;
    	Date p_date[189];
    	string p_continent;
    	unsigned int p_nb_population;
    	//string p_langues_officielles[10];
    	float p_taux_analphabete;
    	float p_pbn;
    	float p_pourcentage_universitaires;
    	unsigned int nbre_langues;
     
     
    }Pays;
    ( bon , ya certaines données que je n'utilise pas encore)

    Quel est le problème ?
    au moment de l'execution , juste après le : voulez vous ajouter un pays , je tappe 0 et là il me sort la fameuse dialog box de windows ><

    merci

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Par défaut
    re ,

    par la même occasion , quelles sont les principales raisons d'un access violation ( bon un pointeur mal initialisé , qui pointe vers un endroit zarbi en mémoire ? quoi encore ?) comment , se prémunir contre ça ( mieux vaut prévenir , que guérir :p) ?

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Potientiellement, on rencontre assez souvent aussi mémoire libérée plusieurs fois, accès à un élément en dehors des limites d'un tableau, mélange new/delete[] ou new[]/delete...

    Dans ton cas :
    - d'où vient compteur ?
    - d'où vient str_p ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Par défaut
    compteur est une variable globale ( j'ai honte de le dire , mais c'était vraiment pr tester ...) initialisé à 0.
    la fct appelante de saisie_donnees ( en l'occurence main()) contient la variable Pays p[189] , c un passage par valeur.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    As-tu essayé d'utiliser un debugger ?

    Si le bug intervient lorsque tu as tapé 0, la ligne qui met le boxon peut se trouver dans la fonction ayant appelé saisie_donnees (donc main), puisque lorsque tu as tapé 0 ça stoppe la boucle et quitte immédiatement la fonction.

    Sinon comme d'hab, essaye d'extraire un code minimal complet qui reproduit le problème.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Par défaut
    le débogueur de VC++ , m'envoie sur une belle page de code en ASM , je vais essayer tripatouiller un peu plus cet outil qui pourrait surement m'aider !
    d'ailleurs , j'en profite pour vous demander si vous connaissez pas une bonne doc sur l'utilisation d'un débogueur ( celui de vc++ entre autres ) à part le fichier d'aide de l'ide , bien sur ... ?

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    le débogueur de VC++ , m'envoie sur une belle page de code en ASM
    Pour ça il y a la pile d'appels de fonctions (si elle n'est pas affichée par défaut tu la trouves dans un menu), qui te permet de remonter jusqu'à une fonction appartenant à ton code.

Discussions similaires

  1. Depuis EDI DELPHI : Access Violation
    Par powerlog dans le forum EDI
    Réponses: 1
    Dernier message: 03/08/2005, 16h59
  2. Access violation avec fseek
    Par baleine dans le forum C
    Réponses: 7
    Dernier message: 18/03/2005, 16h41
  3. Réponses: 7
    Dernier message: 22/02/2005, 13h07
  4. [DELPHI][PROECEDURES STOCKES] Access violation
    Par All Jinx dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/05/2004, 15h57
  5. Réponses: 3
    Dernier message: 22/05/2002, 09h37

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