Bonjour,
Voici mon problème en texte, le code suit.
Je passe trois pointeurs dans une méthode afin de leurs réallouer de la mémoire, leurs assigner des valeurs, et pouvoir les utiliser par après en dehors de la méthode. Lorsque j'imprime les valeurs que je viens d'assigner dans la méthode, elles sont correctes. Malheureusement si je les imprime en dehors de ma méthode les valeurs retournées ne correspondent plus.
En code ça donne,
dans la méthode main :
dans interpo_set_latlon() mnt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 float *lat = malloc(sizeof(*lat)); float *lon = malloc(sizeof(*lon)); size_t *taille = calloc(2,sizeof(*taille)); /*puis plein de code pas intéressant */ interpo_set_latlon(taille,ncid_mean[0],lat,lon,1);// printf("lat[0] lon[0]: %e %e\n",lat[0],lon[0]); printf("lat[end] lon[end]: %e %e\n",lat[taille[0]-1],lon[taille[1]-1]); printf("lat[50] lon[50]: %e %e\n",lat[50],lon[50]);
En gros les valeurs sortant des printf() dans interpo_set_lat_lon sont justes et la sortie correspondante est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 void interpo_set_latlon(size_t *taille,int id,float *lat,float *lon, int type) { /*pleins de trucs pas intérressants */ lat = (float*)realloc(lat,latdim*sizeof(float)); lon = (float*)realloc(lon,londim*sizeof(float)); /*puis assignations des valeurs */ for(...) { lat = ....; lon = ....; } /*assignations des valeurs correctement faite car les lignes suivantes affichent les bonnes valeurs*/ printf("taille : %d %d \n",taille[0],taille[1]); printf("lat : %e %e %e\n",lat[0],lat[latdim-50],lat[latdim-1]); printf("lat : %e %e %e\n",lon[0],lon[londim-50],lon[londim-1]); printf("(--) Exiting interpo get set latlon\n"); fflush(stdout); }
taille : 94 192
lat : 8.854200e+01 4.761840e+00 -8.854200e+01
lat : 0.000000e+00 2.662500e+02 3.581250e+02
Tandis que la sortie après l'appel de la méthode dans main donne :
lat[0] lon[0]: 0.000000e+00 5.044616e-33
lat[end] lon[end]: 1.401298e-45 7.510960e-43
lat[50] lon[50]: 0.000000e+00 1.779649e-43
taille[0] taille[1] : 94 192
En conclusion, mon pointeur taille contient les bonnes infos (mais il a été initialisé dans main) tandis que lat et lon prennent n'importe quoi comme valeur.
Est-ce que quelqu'un peut expliquer au pauvre petit débutant que je suis pourquoi mon passage de valeur par référence ne fonctionne pas comme attendu ??
J'ai pas mis tout le code car c'est beaucoup de ligne, et ça utilise des méthodes provenant d'autres librairies, je me suis donc limité aux lignes qui me semblaient importantes,
merci beaucoup,
Partager