fclose () causando falla de segmentación

Tengo un archivo de texto delimitado por tabulaciones que estoy analizando. Su primera columna contiene cadenas del formato.chrX, dóndeX denota un conjunto de cadenas, por ejemplo, "1", "2", ..., "X", "Y".

Estos se almacenan en unchar* llamadochromosome, como se analiza el archivo.

El archivo de texto se clasifica en la primera columna de manera lexicográfica, es decir, tendré un número de filas que comienzan con "chr1", y luego "chr2", etc.

En cada entrada "chrX", necesito abrir otro archivo asociado con esta entrada:

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

Tengo la funciónopenSourceFile que se define de la siguiente manera:

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);                                                                                                                                                         
    }                                                                                                                                                                             
}      

El problema es que mi aplicación se cierra con un fallo de segmentación que va del primer cromosoma al segundo (desdechr1 achr2) en la siguiente línea, donde cierro el primer archivo de cromosomas que abrí:

fclose(merbaseIn);

Se que no estoy pasandofclose un puntero NULO, porque hasta el fallo de segmentación, estoy leyendo datos de este archivo. Incluso puedo envolver esto en un condicional y todavía tengo la falla:

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

Además, lo séopenSourceFile trabajos (al menos parachr1, al configurar el primer manejador de archivo deFILE*) porque mi aplicación analizachr1 filas y lee datos de laFILE* archivo fuente correctamente.

De que se trata estofclose ¿Llamada que está causando un fallo de segmentación?

Respuestas a la pregunta(8)

Su respuesta a la pregunta