Référence sur un entier dynamiquement alloué et dont la mémoire été libérée
2 réponses
louisbethune1997
Salut tout le monde !
Petit passage en coup de vent, pour poser rapidement une petite question.
Comment se fait-il qu'un tel programme s'ex=E9cute normalement chez moi san=
s erreur ? Que dit le norme =E0 ce sujet ? Car je soup=E7onne l=E0 une aber=
ration (je l'ai fait pour l'exp=E9rience d'ailleurs... ).
#include <iostream>
int main()
{
int *pi =3D new int;
int &ri =3D *ip;
delete pi;
ri =3D 5;
std::cout << ri << '\n';
}
Cette situation produit-elle un r=E9sultat ind=E9termin=E9 ou a-t-il =E9t=
=E9 pr=E9vu que cela fonctionne toujours de la m=EAme mani=E8re ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
James Kanze
On Tuesday, 19 February 2013 18:08:01 UTC, wrote:
Comment se fait-il qu'un tel programme s'exécute normalement chez moi sans erreur ? Que dit le norme à ce sujet ? Car je soupçonne là une aberration (je l'ai fait pour l'expérience d'ailleurs... ).
#include <iostream>
int main() { int *pi = new int; int &ri = *ip; delete pi; ri = 5; std::cout << ri << 'n'; }
Cette situation produit-elle un résultat indéterminé ou a-t-il été prévu que cela fonctionne toujours de la même manière ?
C'est du comportement indéfini, ce qui veut dire que n'importe ce qui se passe, l'implémentation est correcte. Dans ton cas, on pourrait bien imaginer une implémentation pour le débogguage qui génère une erreur, mais je n'en connais pas où il ne marcherait pas par défault.
-- James
On Tuesday, 19 February 2013 18:08:01 UTC, louisbet...@gmail.com wrote:
Comment se fait-il qu'un tel programme s'exécute normalement
chez moi sans erreur ? Que dit le norme à ce sujet ? Car je
soupçonne là une aberration (je l'ai fait pour l'expérience
d'ailleurs... ).
#include <iostream>
int main()
{
int *pi = new int;
int &ri = *ip;
delete pi;
ri = 5;
std::cout << ri << 'n';
}
Cette situation produit-elle un résultat indéterminé ou a-t-il
été prévu que cela fonctionne toujours de la même manière ?
C'est du comportement indéfini, ce qui veut dire que n'importe
ce qui se passe, l'implémentation est correcte. Dans ton cas, on
pourrait bien imaginer une implémentation pour le débogguage
qui génère une erreur, mais je n'en connais pas où il ne
marcherait pas par défault.
Comment se fait-il qu'un tel programme s'exécute normalement chez moi sans erreur ? Que dit le norme à ce sujet ? Car je soupçonne là une aberration (je l'ai fait pour l'expérience d'ailleurs... ).
#include <iostream>
int main() { int *pi = new int; int &ri = *ip; delete pi; ri = 5; std::cout << ri << 'n'; }
Cette situation produit-elle un résultat indéterminé ou a-t-il été prévu que cela fonctionne toujours de la même manière ?
C'est du comportement indéfini, ce qui veut dire que n'importe ce qui se passe, l'implémentation est correcte. Dans ton cas, on pourrait bien imaginer une implémentation pour le débogguage qui génère une erreur, mais je n'en connais pas où il ne marcherait pas par défault.