Modifier une variable via un pointeur

Modifier une variable via un pointeur

par Pierre Louis Sintre,
Number of replies: 4

Bonjour,

J'ai une erreur dans mon code que je n'arrive pas à comprendre : en simplifiant le problème, j'ai deux objets x et y (de la même classe), et un pointeur vers x : px ; je veux assigner à x la valeur y, à travers le pointeur px ; j'ai donc écrit la ligne :

*px = y;

Cette commande devrait marcher, car en l’implémentant par exemple avec x et y étant des int, il n'y a aucun problème. Cependant, dans mon cas, j'ai une erreur :

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted (core dumped)

Je me demandais donc si quelqu'un avait une idée sur l'origine de ce problème ; d'après mes recherches, bad_alloc semble apparaître lorsqu'on essaie d'assigner à une variable une donnée trop volumineuse ; or, ici ce n'est pas le cas...

Merci d'avance !

Pierre Sintre

In reply to Pierre Louis Sintre

Re: Modifier une variable via un pointeur

par Josué Antoine Maechling,

Normalement ça peut fonctionner, en tout cas avec une classe assez simple ça marche.

As-tu surchargé l'opérateur "=" ? Ou as-tu un constructeur de copie ?

Et l'erreur bad_alloc c'est juste pour signaler un échec d'allocation, en tout cas d'après la doc ( https://en.cppreference.com/w/cpp/memory/new/bad_alloc )

In reply to Josué Antoine Maechling

Re: Modifier une variable via un pointeur

par Pierre Louis Sintre,
Je viens de surcharger l'operator=, et de faire le constructeur de copie et le destructeur  ; le problème semble persister...
In reply to Pierre Louis Sintre

Re: Modifier une variable via un pointeur

par Josué Antoine Maechling,
C'est difficile de te donner plus d'indications sans voir ton code, je ne connais pas toutes les causes de cette erreur mais en voyant sur internent à mon avis c'est peut-être dû à un problème d'héritage, avec des destructeurs de la super classe éventuellement, ou encore à une mauvaise allocation de base de tes objets.

Envoie moi ton code dans le doute...on va bien trouver...      josue.maechling@epfl.ch

In reply to Josué Antoine Maechling

Re: Modifier une variable via un pointeur

par Josué Antoine Maechling,

Pour les autres : Au final l'erreur était liée à un double delete.

Des toupies étaient créées dans le main et données à Systeme qui prenait juste des pointeurs sur ces Toupies. À la fin du main elles sont détruites mais le destructeur de Systeme essayait aussi de les détruire.