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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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 : 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
 
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