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?