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 execution: 0x000008 mémoire ne peut être "read"


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut Erreur execution: 0x000008 mémoire ne peut être "read"
    Bonjour,

    lors de l'execution de mon programme, une fenêtre apparait et me dit:

    "L'instruction à "0x00403660" emploie l'adresse mémoire "0x0000008". La mémoire ne peut pas être "read" ".

    Ce me propose de lancer le debogueur, et là ca me dit:
    "Unhandled exeption in nomduprog.exe: 0xC0000005: access violation"

    Je ne sais pas du tout me servir du débogeur et je ne sais pas du tout ce que veulent dire ces messages.
    Quelqu'un sait comment faire svp ?

    Merci!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    En clair: L'erreur dit que tu accèdes à un champ d'une stucture/classe (sans doute le troisième ou le second) à partir d'un pointeur nul.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    et comment je peux faire pour arranger le massacre?

    j'ai juste rajouté à mon programme une boucle pour remplir deux vecteurs à partir d'un autre vecteur. le vecteur de base est "bon", je peux l'afficher sans problème.
    Voilà mon code:
    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
     
     
    //------------------------Mise a jour du vecteur--------------------------
     
    	while(getline(ifs5, line))
    	{
    		vect4.push_back(line);
    	};		
     
    //-----------CREATION DES VECTEURS NOMS ET COORDONNES----------------------
     
    	for(i=0;i<floor(vect4.size()/2);i++)
    	{	
    		vect4[2*i]=nom[i];
    		vect4[2*i+1]=coord[i];
    	};
    pourtant ifs5 est bien défini , de même que les vecteurs vect4,nom et coord...
    dans le débogeur, ca me pointe sur une ligne en particulier :
    size_type size() const
    {return (_Len); }
    Mais je ne sais vraiment pas quoi faire... tu penses pouvoir m'aider là-dessus?

  4. #4
    Scorpi0
    Invité(e)
    Par défaut
    Il nous faudrait ton code en entier (si possible, une version allégée mais qui plante).

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    alors voilà le code :

    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
     
    #include "stdafx.h"
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <sstream>
    #include <cmath>
    #include <algorithm>
    using namespace std;
     
     
    int main(int argc, char* argv[])
    {
    	vector<string> vect4;
    	vector<string> nom;
    	vector<string> coord;
    	string line;
    	int i;
     
     
    	ifstream ifs5( "liste4.txt" );
    	ofstream nometcoor( "nometcoord.txt"); 
     
     
     
    //------------------------Mise a jour du vecteur--------------------------
     
    	while(getline(ifs5, line))
    	{
    		vect4.push_back(line);
    	};		
     
    //-----------CREATION DES VECTEURS NOMS ET COORDONNES----------------------
     
    	for(i=0;i<floor(vect4.size()/2);i++)
    	{	
    		vect4[2*i]=nom[i];
    		vect4[2*i+1]=coord[i];
     
    	};
     
    return 0;
    }
    -ifs5 est un fichier texte ou il y a une ligne sur 2 des noms ou des coordonnées, et je veux les extraire dans 2 vecteurs distincts nom et coord.
    -donc je crée un 1er vecteur à partir du fichier, et une ligne sur deux j'envoi les string dans les 2 vecteurs...

    Merci pour votre aide, je galère là !!

  6. #6
    Scorpi0
    Invité(e)
    Par défaut
    Forcement, au moment de faire

    Le vector nom n'a jamais été rempli nul part.

    Tu essayes d'accéder à la ligne i d'un vector vide, et ça, c'est mal !
    Sur cette ligne, c'est le vector nom que tu veux remplir, et là tu essayes de remplir le vector vect4 à partir du vector nom.
    Ce que tu veux faire c'est plutot un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	for(i=0;i<floor(vect4.size()/2);i++)
    	{	
    		nom.push_back(vect4[2*i]);
    		coord.push_back(vect4[2*i+1]);
     
    	};

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    G-E-N-I-A-L !!!!!!!!!!
    Merci vraiment !!!!
    ca tue !!

    vous êtes trop enormes!!!

  8. #8
    Scorpi0
    Invité(e)
    Par défaut
    Pas de problème !
    Sinon j'aime pas ton for, donc je t'en propose une autre implémentation plus élégante avec itérateurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    vector<string>::iterator myItSt
     
     
    for(myItSt=vect4.begin();myItSt != vect4.end() && myItSt+1 != vect4.end();myItSt +=2)
    {
    	nom.push_back(*myItSt);
    	coord.push_back(*(myItSt+1));
    };
    Ça t'évite la division, l'approximation, et c'est plus clair !

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Personnellement je trouve la boucle plus claire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=0; i+1<vect4.size(); i+=2)
    {	
    	nom.push_back(vect4[i]);
    	coord.push_back(vect4[i+1]);
    };

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

Discussions similaires

  1. Erreur "mémoire ne peut être read"
    Par ggvert dans le forum C++
    Réponses: 2
    Dernier message: 02/04/2011, 07h47
  2. Erreur Excel "La mémoire ne peut pas être "read""
    Par DaBeam dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 16/05/2008, 10h29
  3. La mémoire ne peut être read
    Par asgardia dans le forum C
    Réponses: 11
    Dernier message: 07/05/2006, 22h09

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