Bonjour ,
J'ai un gros souci dont l'explication dépasse certainement très largement ma compréhension du C .
Je m'explique :
j'ai une fonction dont le proto est :
Code :
- 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 .
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 .
Et du coup je suis complètement dépassé par les événements . 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 .
Merci d'avance .
Description simpliste de ma fonction lire_double et de son appel dans le main :
Code :
- char **tab_cadres ;
- double lire_double(int adresse)
- {
- int deplacement = (adresse%puiss(2, 12)) ;
- int num_cadre ;
- double res ;
-
- num_cadre = get_num_cadre(adresse) ;
- res = *((double *)(tab_cadres[num_cadre]+deplacement)) ;
- printf("valeur retournee = %f\n", res) ; // la valeur affichée est correct
- return res ;
- }
|
Code :
- int main(int argc, char *argv[])
- {
- int d ;
- double res ;
-
- d = get_adresse(sizeof(double)) ;
- ecrire_double((double)10, d) ;
- res = lire_double(d) ;
- printf("valeur recue = %f\n", res) ; // valeur différente de celle envoyée (donc fausse)
- system("PAUSE" );
- return 0;
- }
|
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 . 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() ).
Message édité par HannibAlBundy le 21-04-2005 à 02:14:20