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?

questionAnswers(8)

yourAnswerToTheQuestion