2 votes

L'utilisation de pointeurs en conjonction avec des classes renvoie des valeurs inutiles

Il s'agit d'un code issu d'un quiz réalisé plus tôt dans la journée. Langage : C++.

class Shape
{ 
protected:
int *x;
int *y;
public:
void draw()
    {
      //we were supposed to add random code here.  
    }
};

On nous a demandé de créer un opérateur surchargé de notre choix et de l'implémenter dans main. J'étais un peu intimidé par les pointeurs et j'ai donc décidé de créer un constructeur comme suit :

class Shape
{ 
protected:
int *x;
int *y;
public:
void draw()
    {
       cout<<*x<<endl;
    }
    Shape(){};
    Shape{int a, int b)
    {
        x = &a; //this I thought would allow *x to act just like a normal variable. 
        y = &b; 
    }
    //code for operator overloading.
};

J'avais l'impression d'avoir réussi le quiz, mais lorsque j'ai essayé de le mettre en œuvre sur mon ordinateur à la maison, je me suis rendu compte que la fonction "draw" renvoie des valeurs/adresses mémoire inutiles. Tout le reste en souffre. Pouvez-vous me dire pourquoi cela se produit ? Cela a-t-il un rapport avec la portée des pointeurs ? Je voudrais pouvoir utiliser les pointeurs comme des variables normales. Je ne suis qu'un étudiant. Merci d'avance !

3voto

Tony The Lion Points 28208

S'il s'agit de C++, ce qui semble être le cas, votre problème est que vous assignez des pointeurs à l'adresse des paramètres du constructeur.

Les paramètres du constructeur sont créés lors de l'appel du constructeur et détruits lors de la destruction de ce dernier. Assignez vos pointeurs à des variables non locales à une fonction.

2voto

Joakim Elofsson Points 5048

A et b sont placés sur la pile et l'affectation des pointeurs x et y à l'adresse de a et b fera pointer x et y quelque part sur la pile, de sorte que la valeur de *x (et *y) est celle qui se trouve sur la pile à ces adresses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X