Bonjour,
j'ai une fonction qui lit dans un fichier binaire et qui récupère les valeurs que j'y ai inscrit en les plaçant dans un tableau passé en paramètre.
les valeurs sont des doubles.
Mon problème porte sur la taille du tableau.
Comment pourrai je tester sa taille pour reallouer la taille dynamiquement si nécéssaire.
sachant que lorsque j'ai tester, j'ai pu acceder à l'indice 27 d'un tableau ne comportant que 8 case à la base... sans aucune erreur de la part ni du compilateur ni de linux.
il existe probablement une solution, mais je ne comprend pas vraiment comment fonctionne l'accés a la mémoire du tableau.
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
22
23
24
25
26
27
28
29 int main(){ double reel[8]; envoieReels(pointeurSurFichier,reel) } void envoieReels(FILE* fichier,double reel[]) { double nb; int retFread,i=0,j=0; reel[27]=15; /*le printf affiche effectivement 15.000000 alors que le tableau passé en paramètre fait 8 case*/ printf("%f",reel[27]); while(1){ retFread=fread(&nb,sizeof(double),1,fichier); if (feof(fichier)){/*sortie de boucle si EOF*/break;} if (retFread!=1){printf("erreur lors de la lecture dans \"\"\n");exit(EXIT_FAILURE);} if(j<=i){ reel[j]=nb; j+=1; }else{ printf("erreur, le tableau en argument est trop petit"); exit(EXIT_FAILURE); } } }
j'utilise gcc 4.4.1.
Dans l'idéal, j'aimerai utiliser realloc pour eviter toute erreur de segmentation. sinon j'aimerai au moins pouvoir trouver la taille du tableau pour pouvoir quitter si le noimbre de valeur contenu dans le fichier est trop importante.
Une dernière solution envisagé serai de crée le tableau dynamiquement sans le passé en paramètre et de renvoyer un poitneur sur double, mais je pense que ça risque de pas être très jolie de refaire un realloc a chaque nouveau nombre du fichier.
D'avance merci...
PS: comment mettre une signature de manière systématique ?
Antoine DUBOIS
License Informatique 2
Université Claude Bernard Lyon 1
Partager