la fonction fclose() provoquant faute de segmentation

J'ai un fichier texte délimité par tabulation que je suis de l'analyse. Sa première colonne contient des chaînes de format chrX, où X désigne un ensemble de chaînes de caractères, par exemple, "1", "2", ..., "X", "Y".

Ils sont tous stockés dans un char* appelé chromosome, comme le fichier est analysé.

Le fichier texte est trié sur la première colonne de manière lexicographique, c'est à dire, je vais avoir un certain nombre de lignes commençant par "chr1", et puis "chr2", etc.

À chaque "chrX entrée", - je besoin pour ouvrir un fichier qui est associé à cette entrée:

FILE *merbaseIn;

//loop through rows...

if (chromosome == NULL)                                                                                                                                                   
    openSourceFile(&chromosome, fieldArray[i], &merbaseIn, GENPATHIN);                                                                                                      
else {                                                                                                                                                                    
    if (strcmp(chromosome, fieldArray[i]) != 0) { //new chromosome                                                                                                   
        fclose(merbaseIn); //close old chromosome FILE ptr                                                                                                                                                                                                                                    
        free(chromosome); //free old chromosome ptr                                                                                                                          
        openSourceFile(&chromosome, fieldArray[i], &merbaseIn, GENPATHIN); //set up new chromosome FILE ptr                                                                  
    }                                                                                                                                                                       
}  
//parse row

J'ai la fonction openSourceFile est définie comme suit:

void openSourceFile (char** chrome, const char* field, FILE** filePtr, const char *path) {
    char filename[100];                                                                                                                                                           
    *chrome = (char *) malloc ((size_t) strlen(field));
    if (*chrome == NULL) {                                                                                                                                                        
        fprintf(stderr, "ERROR: Cannot allocate memory for chromosome name!");                                                                                                      
        exit(EXIT_FAILURE);                                                                                                                                                         
    }                                                                                                                                                                             

    strcpy(*chrome, field);                                                                                                                                                       
    sprintf(filename,"%s%s.fa", path, field);                                                                                                                                     

    *filePtr = fopen(filename, "r");                                                                                                                                              
    if (*filePtr == NULL) {                                                                                                                                                       
        fprintf(stderr, "ERROR: Could not open fasta source file %s\n", filename);                                                                                                  
        exit(EXIT_FAILURE);                                                                                                                                                         
    }                                                                                                                                                                             
}      

Le problème, c'est que mon application se ferme avec une erreur de Segmentation passant de la première chromosome de la seconde (à partir de chr1 à chr2) à la ligne suivante, où j'ai fermer le premier chromosome fichier que j'ai ouvert:

fclose(merbaseIn);

Je sais que je ne suis pas de passage fclose un pointeur NULL, parce que, jusqu'à la Faute de Segmentation, je suis de la lecture des données à partir de ce fichier. Je peux même conclure à une condition, et je reçois toujours la Faute:

if (merbaseIn != NULL) {
    fclose(merbaseIn);
}

De plus, je sais openSourceFile de travaux (au moins pour chr1, lors de la mise en place du premier descripteur de fichier de FILE*) parce que mon application analyse chr1 lignes et lit les données à partir de la FILE* fichier source correctement.

Qu'est-ce fclose appel qui est à l'origine une erreur de Segmentation à se produire?

OriginalL'auteur Alex Reynolds | 2009-09-18