[CPP] Renvoi d'une réference

Voir le sujet précédent Voir le sujet suivant Aller en bas

[CPP] Renvoi d'une réference

Message  Guest le Ven 01 Jan 2010, 20:52

Salut,
Pour le code suivant:
Code:
#include <iostream>
using namespace std;
int & minOf ( int a , int b )
{
  if ( a < b )
    return a;
  else
    return b;
  }
int main()
{
int x = 9, y = 6, z;
z = minOf(x,y);
cout << z << endl;
return 0;
}

Ce code affiche 6 pour z mais j'ai pas trop saisi.Pourtant on renvoie une référence de b qui sera détruit à la fin du bloc. Il n'y a pas de copie lors d'un renvoi d'une référence . On récupère donc une référence de n'importe quoi . Je me trompe?
Merci d'avance .

Guest
Invité


Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  smb le Ven 01 Jan 2010, 22:48

ridor a écrit:Salut,
Pour le code suivant:
Code:
#include <iostream>
using namespace std;
int & minOf ( int a , int b )
{
  if ( a < b )
    return a;
  else
    return b;
  }
int main()
{
int x = 9, y = 6, z;
z = minOf(x,y);
cout << z << endl;
return 0;
}

Ce code affiche 6 pour z mais j'ai pas trop saisi.Pourtant on renvoie une référence de b qui sera détruit à la fin du bloc. Il n'y a pas de copie lors d'un renvoi d'une référence . On récupère donc une référence de n'importe quoi . Je me trompe?
Merci d'avance .

Non.

drunken drunken

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  Guest le Sam 02 Jan 2010, 03:26

J'ai posé la même question sur un forum spécialisé. Voici la réponse d'un intervenant :
It's an accident, it might print 6 on some platforms, it might print something completely different on other. You have a case of "undefined behaviour", so anything could happen.

My Digital Mars compiler prints this warning when I try to compile it:
why.cpp(6) : Warning 15: returning address of automatic 'a'

My antique BorlandC++ prints this warning:
why.cpp 6: Attempting to return a reference to local variable 'a' in function minOf(int,int)

These warnings should give you an idea of what is wrong.

Aucun warning sous MinGW :-(

Guest
Invité


Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  pbt le Sam 02 Jan 2010, 17:50

ridor a écrit:Aucun warning sous MinGW :-(

g++ donne deux warning ...

a.cpp: In function ‘int& minOf(int, int)’:
a.cpp:3: warning: reference to local variable ‘a’ returned
a.cpp:3: warning: reference to local variable ‘b’ returned

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  Nicky le Lun 04 Jan 2010, 11:51

Code:
#include <iostream>
using namespace std;

int & minOf ( int a , int b )
{
  if ( a < b )
  {
    return a;
  }
  else
  {
    return b;
  }
}

int main()
{
int x = 9, y = 6;
int &z = minOf(x,y);
cout << z << endl;
y=5;
cout << z << endl;
return 0;
}
m'affiche :
6
4435592

on évitera clairement les références a une variable local. conclusion : il place la valeur dans Z et autorise une instruction?
psq une deplus et ca foire:



Code:
int main()
{
int x = 9, y = 6;
int &z = minOf(x,y);
cout << z << endl;
int w=2;
w=4;
cout << z << endl;
return 0;
}

meme afficher Z 2x de suite ne fonctionne pas... il y a donc un delais ?

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  Anthoblack le Lun 04 Jan 2010, 12:08

Nicky a écrit: il y a donc un delais ?
Oui, jusqu'à ce que quelque chose d'autre soit écrit à cet emplacement mémoire Wink

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  smb le Lun 04 Jan 2010, 15:01

Anthoblack a écrit:
Nicky a écrit: il y a donc un delais ?
Oui, jusqu'à ce que quelque chose d'autre soit écrit à cet emplacement mémoire Wink

Bien vu Antho !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  Nicky le Lun 04 Jan 2010, 20:22

smb a écrit:
Anthoblack a écrit:
Nicky a écrit: il y a donc un delais ?
Oui, jusqu'à ce que quelque chose d'autre soit écrit à cet emplacement mémoire Wink

Bien vu Antho !


ok ok, bien logique une fois qu'on y pense Very Happy , faut juste y penser ^^ merci

EDIT: je vais peu etre dire une enorme c******* bétise, mais l' OS n'attribue pas un espace mémoire réserver à mon programme pour qu'il tourne sans que un autre programme puisse écrire dans ma zone mémoire? principe de segmentation non? et dans mon programme lorsque j'ai simplement fais 2 "cout" de suite sans nouvelle allocation la valeur à quand même changer...

Idea a moins que ca ne soit le "cout" ou une méthode "operator<<()" qui charge qqch en mémoire... Question Question


EDIT 2: On fait tourner notre programme en mode console dans une emulation de dos... donc mode réel émulé aussi? donc pas de segmentation... ?

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  Anthoblack le Lun 04 Jan 2010, 22:02

Nicky a écrit:EDIT: je vais peu etre dire une enorme c******* bétise, mais l' OS n'attribue pas un espace mémoire réserver à mon programme pour qu'il tourne sans que un autre programme puisse écrire dans ma zone mémoire? principe de segmentation non? et dans mon programme lorsque j'ai simplement fais 2 "cout" de suite sans nouvelle allocation la valeur à quand même changer...

Idea a moins que ca ne soit le "cout" ou une méthode "operator<<()" qui charge qqch en mémoire... Question Question


EDIT 2: On fait tourner notre programme en mode console dans une emulation de dos... donc mode réel émulé aussi? donc pas de segmentation... ?
1. Tes COUT sont des utilisations (implicites et simplifiées pour l'utilisation) d'objets. Donc utilisation de zones mémoires, comme tu l'as suggéré Smile

2. Le mode réel n'est utilisé que pour le démarrage de l'OS. Après, on est (et on reste sauf mini exceptions) en mode protégé (cfr cours de système). Je ne sais pas comment fonctionne ton émulation... Là j'attends la lumière des professeurs Wink

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  Nicky le Lun 04 Jan 2010, 22:30

Anthoblack a écrit:
1. Tes COUT sont des utilisations (implicites et simplifiées pour l'utilisation) d'objets. Donc utilisation de zones mémoires, comme tu l'as suggéré Smile

2. Le mode réel n'est utilisé que pour le démarrage de l'OS. Après, on est (et on reste sauf mini exceptions) en mode protégé (cfr cours de système). Je ne sais pas comment fonctionne ton émulation... Là j'attends la lumière des professeurs Wink

ouai j'avais compris que on restait en mode protéger c est pour ca que je disais que le mode réel etait "émulé" , enfin que je demandais si il l'était.

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

Re: [CPP] Renvoi d'une réference

Message  Contenu sponsorisé Aujourd'hui à 14:47


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum