fclose () вызывает ошибку сегментации
У меня есть текстовый файл с разделителями табуляции, который я анализирую. Его первый столбец содержит строки форматаchrX
, гдеX
обозначает набор строк, например, «1», «2», ..., «X», «Y».
Каждый из них хранится вchar*
называетсяchromosome
, как файл анализируется.
Текстовый файл отсортирован по первому столбцу лексикографически, то есть у меня будет ряд строк, начинающихся с "chr1", а затем "chr2" и т. Д.
При каждой записи "chrX" мне нужно открыть другой файл, связанный с этой записью:
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
У меня есть функцияopenSourceFile
это определяется следующим образом:
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);
}
}
Проблема в том, что мое приложение закрывается с ошибкой сегментации, идущей от первой хромосомы ко второй (изchr1
вchr2
) в следующей строке, где я закрываю первый файл хромосомы, который я открыл:
fclose(merbaseIn);
Я знаю, я не прохожуfclose
нулевой указатель, потому что вплоть до ошибки сегментации я читаю данные из этого файла. Я могу даже обернуть это в условное, и я все еще получаю ошибку:
if (merbaseIn != NULL) {
fclose(merbaseIn);
}
Далее я знаюopenSourceFile
работает (хотя бы дляchr1
при настройке первого дескриптора файлаFILE*
) потому что мое приложение анализируетchr1
строки и читает данные изFILE*
исходный файл правильно.
Что это об этомfclose
вызов, вызывающий ошибку сегментации?