Modification de pointeurs dans une fonction
Après 2 ans d'inactivité en langage C, je me relance dedans. Et avec des pointeurs, même pas peur.
Sauf que je n'y arrive pas, et il me semble à cause d'une erreur de débutant...
Voilà, j'ai un fichier tabulé à parser qui ressemble à ceci :
Code:
1 2 3 4 5
|
Hs:NCBIv35:chr1 1703 13.07712
Hs:NCBIv35:chr1 1736 14.447635
Hs:NCBIv35:chr1 1769 14.679797
Hs:NCBIv35:chr1 1799 14.679797 |
j'ai une fonction file2matrice qui doit me permettre de placer dans 3 vecteurs les 2 dernières colonnes ainsi que le dernier chiffre de la première colonne, et qui me rend le nombre de lignes lues :
Code:
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 30 31
|
int file2matrice(FILE * fichier, int * chr, int * pos, double * val){
int nb_lignes_lues = 0;//nombre de lignes lues
int i;//variable bidon
char ligne [LG_MAX];//longueur max lue dans un fichier
char ** contenu;//contenu de la ligne splittée par tabulation
while(fgets(ligne, LG_MAX, fichier) != NULL) {
//on récupère le contenu de ligne
contenu = str_split(ligne,"\t");//fonction pour splitter une ligne
//on alloue de la mémoire supplémentaire
pos = realloc(pos, (nb_lignes_lues+1)*sizeof(int));
val = realloc(val, (nb_lignes_lues+1)*sizeof(double));
*(val+nb_lignes_lues) = atof(*(contenu+2));
*(pos+nb_lignes_lues) = atoi(*(contenu+1));
nb_lignes_lues++;
}//while
//verification
for(i=0;i<nb_lignes_lues;i++){
printf("%f\t",*(val+i));
printf("%d\n",*(pos+i));
}
return nb_lignes_lues;
} |
pour l'instant je ne charge que les deux dernières colonnes. la dernière boucle étant là pour vérifier les données contenues dans les deux vecteurs concernés.
Jusqu'ici tout va bien, j'ai bien les bonnes données enregistrées. Mais dans le main, je lance la fonction :
Code:
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
|
int main(int argc , char *argv[]){
FILE * f;
int * chrom = (int*) malloc(1*sizeof(int));
int * position = (int*) malloc(1*sizeof(int));
double * pvalue = (double*) malloc(1*sizeof(double));
int i; //variable bidon
int taille = 0;//nombre de lignes enregistrées
//importation du fichier
f = fopen("/home/data/test2.txt","r");
if(f==NULL){
perror("fichier 1\n");
}
taille = file2matrice(f, chrom, position, pvalue);
fclose(f);
printf("%d lignes lues\n",taille);
for(i=0;i<taille;i++){
printf("%f\t",*(pvalue+i));
printf("%d\n",*(position+i));
}
return 0;
} |
j'ai en réponse avec la dernière boucle soit 0 soit des valeurs fantaisistes. Alors à quel moment mon pointeur perd son adresse?
Merci pour vos réponses