Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1698 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1054725
HannibAlBu​ndy
Posté le 21-04-2005 à 01:12:49  profilanswer
 

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
mood
Publicité
Posté le 21-04-2005 à 01:12:49  profilanswer
 

n°1054745
matafan
Posté le 21-04-2005 à 01:57:48  profilanswer
 

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.

n°1054750
HannibAlBu​ndy
Posté le 21-04-2005 à 02:13:57  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
qui peut dire ce qui cloche dans mon mini prog ?? [ RESOLU ]Arrondir un filesize [RESOLU]
[Java] [Resolu] Erreur ODBC État de curseur non validetest valeur myquery...
JScrollBar: mais tu va demarrer en haut , oui!!!![resolu]Style sur un Button l'aligne en bas ? [résolu]
[Résolu] Comment accèder à une variable d'une autre librarie ASMAfficher une image dont le nom est enregistré dans 1 table [resolu]
test création objet [Résolu]créer un loading[résolu]
Plus de sujets relatifs à : [C] Valeur reçue différente de la valeur retournée [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR