fclose () causando falha de segmentação
Eu tenho um arquivo de texto delimitado por tabulação que estou analisando. Sua primeira coluna contém strings do formatochrX
, OndeX
denota um conjunto de sequências, por exemplo, "1", "2", ..., "X", "Y".
Cada um deles é armazenado em umchar*
chamadochromosome
, como o arquivo é analisado.
O arquivo de texto é classificado na primeira coluna lexicograficamente, ou seja, terei um número de linhas começando com "chr1" e, em seguida, "chr2", etc.
Em cada entrada "chrX", preciso abrir outro arquivo associado a 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
Eu tenho a funçãoopenSourceFile
que é definido da seguinte forma:
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);
}
}
O problema é que meu aplicativo sai com uma falha de segmentação que vai do primeiro cromossomo para o segundo (dechr1
parachr2
) na seguinte linha, onde fecho o primeiro arquivo cromossômico que abri:
fclose(merbaseIn);
Eu sei que não estou passandofclose
um ponteiro NULL, porque até a falha de segmentação, eu estou lendo dados deste arquivo. Eu posso até envolver isso em uma condição e ainda assim obtenho a falha:
if (merbaseIn != NULL) {
fclose(merbaseIn);
}
Além disso, eu seiopenSourceFile
obras (pelo menos parachr1
, ao configurar o primeiro identificador de arquivosFILE*
) porque minha aplicação analisachr1
filas e lê dados doFILE*
arquivo fonte corretamente.
O que é issofclose
chamada que está causando uma falha de segmentação para ocorrer?