[C] Valeur reçue différente de la valeur retournée [Résolu]

Valeur reçue différente de la valeur retournée [Résolu] [C] - C - Programmation

Marsh Posté le 21-04-2005 à 01:12:49    

Bonjour :hello:,
 
J'ai un gros souci dont l'explication dépasse certainement très largement ma compréhension du C :sweat:.
Je m'explique :
j'ai une fonction dont le proto est :

Code :
  1. double lire_double(int adresse) ;

qui, comme son nom l'indique, va lire un double à une adresse donnée et qui me renvoie la valeur lue. Seulement, lorsque je l'appelle, la valeur que je reçois est différente de celle qu'elle m'a envoyée :heink:.
 
Pour être un peu plus clair, avant de renvoyer le double que j'ai lu dans ma fonction lire_double, je l'affiche. Sa valeur correspond alors tout à fait à ce que j'attend. Mais par contre, lorsque que j'appelle lire_double dans mon main et que j'affiche la valeur que me renvoie lire_double, celle-ci est différente (et donc fausse) de celle que j'ai affichée juste avant dans la fonction :pt1cable:.
 
Et du coup je suis complètement dépassé par les événements :p. Alors si une âme charitable voulait bien se pencher sur mon cas, ou ne serait-ce que me donner quelques pistes de recherche ce ne serait pas de refus :ange:.
 
Merci d'avance :jap:.
 
 
Description simpliste de ma fonction lire_double et de son appel dans le main :

Code :
  1. char **tab_cadres ;
  2. double lire_double(int adresse)
  3. {
  4.     int deplacement = (adresse%puiss(2, 12)) ;
  5.     int num_cadre ;
  6.     double res ;
  7.        
  8.     num_cadre = get_num_cadre(adresse) ;
  9.     res = *((double *)(tab_cadres[num_cadre]+deplacement)) ;
  10.     printf("valeur retournee = %f\n", res) ; // la valeur affichée est correct
  11.     return res ;
  12. }


Code :
  1. int main(int argc, char *argv[])
  2. {
  3.     int d ;
  4.     double res ;
  5.    
  6.     d = get_adresse(sizeof(double)) ;
  7.     ecrire_double((double)10, d) ;
  8.     res = lire_double(d) ;
  9.     printf("valeur recue = %f\n", res) ; // valeur différente de celle envoyée (donc fausse)
  10.     system("PAUSE" );
  11.     return 0;
  12. }


 
Alors je suis au courant que ma façon de stocker des doubles et d'aller les lire dans tab_cadres est plus que contestable, mais elle m'est imposée :D. De plus, tout ce qui concerne les malloc sur le char **tab_cabres est correct (preuve en est le résultat correct qui m'est affiché dans lire_double() :whistle: ).


Message édité par HannibAlBundy le 21-04-2005 à 02:14:20
Reply

Marsh Posté le 21-04-2005 à 01:12:49   

Reply

Marsh Posté le 21-04-2005 à 01:57:48    

Ma main a couper que tu n'as pas declare ta fonction avant de l'appeler dans main. Donc dans main le compilo croit qu'elle renvoit un int, et cast les 4 premier octets de la valeur renvoyee par lire_double en double... Ce qui donne evidemment n'importe quoi.

Reply

Marsh Posté le 21-04-2005 à 02:13:57    

argghhhhhhhhhhhh :cry: Merciiiiiiiiii  :love: !!!
 
expérience N°1 : éviter de programmer la nuit :( .

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed