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 writing location 0x00000010.


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 113
    Par défaut Access violation writing location 0x00000010.
    Bonjour, ca fait deux jours que je me tire les cheveux sur ce problème..
    Voici le code:

    Fichier "Curve3.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
     
    #pragma once
     
    #include "Config.h"
    #include "Vector.h"
     
    class Curve
    {
    public:
    	class Point
    	{
    	private:
    		double x_;
    		double y_;
    	public:
    		Point () : x_(0.0),	y_(0.0){}
    		Point (const double x, const double y) :x_(x), y_(y){}
    		void x(const double x) {x_ = x;}     ///////ICI//////
    		void y(const double y) {y_ = y;}    ///////ET ICI ///////
    	};
     
    	Curve (){};
    	Curve (const vector<double>& vx, const vector<double>& vy)
    	{
    		if (vx.size() == vy.size())
    		{
    			for (int i =1; i < vx.size();i++)
    			{
    				v_[i].x(vx[i]);
    				v_[i].y(vy[i]);
    			}
    		}
    	}
    private:
    	vector<Point> v_;
    };
    et voici le main
    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
     
    #pragma once
    #include "Config.h"
    #include "Vector.h"
    #include "Curve3.h"
    void main()
    {	
    	int i;
    	vector<double> x2(5);
    	vector<double> y2(5);
    	for (i =0; i < x2.size(); i++)
    	{ 
    		x2[i] = 200 + 10 + i;
    		y2[i] = 200 + 20 + i;
    	}
    	Curve c2(x2,y2);
    };
    Je travaille sous winxp + visual studio 2003

    Lorsque je compile, il me donne une erreur sur Curve:: Point:: x() et Curve:: Point:: y()
    Je ne comprends vraiment pas. Il n'y a rien de spécial quand meme???
    Si qqun sait m'aider, ce serait vraiment sympa...
    Tks
    dh

  2. #2
    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
    Tu aurais pu donner le message d'erreur...

    Je dirais que le compilo râle parce que le paramètre et la fonction portent tous deux le même nom.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 113
    Par défaut
    oups pardon.. En fait l'erreur est dans le titre:
    "Access violation writing location 0x00000010"

    J'ai déjà essayé avec setx et sety mais rien n'y fait,j'ai le meme message..
    J'avoue que je ne comprends rien..
    Rassure moi , mon code n'est quand meme pas si fou que ca??

  4. #4
    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
    C'est une erreur d'exécution, pas de compilation.

    Tu ne dimensionnes pas v_ avant d'accéder à ses éléments (dans le constructeur de Curve), utilise push_back ou dimensionne le avec le constructeur adéquat.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 113
    Par défaut
    Effectivement
    il faut coder ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	Curve (const vector<double>& vx, const vector<double>& vy)
    	{
    		if (vx.size() == vy.size())
    		{
                                           v_.resize(vx.size());			                          for (int i =1; i < vx.size();i++)
    			{
    				v_[i].x(vx[i]);
    				v_[i].y(vy[i]);
    			}
    		}
    	}
    et ca marche

    Merci

  6. #6
    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
    Pour pinailler, ceci serait un poil meilleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Curve (const vector<double>& vx, const vector<double>& vy)
    {
        if (vx.size() == vy.size())
        {
            for (int i = 1; i < vx.size(); i++)
            {
                v_.push_back(Point(vx[i], vy[i]));
            }
        }
    }
    Au fait, pourquoi ta boucle démarre à l'indice 1 et non 0 ?

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 113
    Par défaut
    pcq il s'agit d'une faute... elle commence au 0 :-)

    Merci beaucoup pour le pinaillage, je vais l'utiliser

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

Discussions similaires

  1. Access violation during writing
    Par Popof dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 17/03/2012, 18h23
  2. [OCILIB] OCI_LobRead erreur Access violation writing location
    Par capic dans le forum Interfaces de programmation
    Réponses: 3
    Dernier message: 05/12/2011, 08h52
  3. "access violation reading location"
    Par Vanito dans le forum C
    Réponses: 7
    Dernier message: 30/06/2011, 19h49
  4. Réponses: 6
    Dernier message: 15/05/2009, 14h07
  5. [débutant]Access violation reading location
    Par gate35 dans le forum C++
    Réponses: 6
    Dernier message: 13/05/2009, 14h32

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