fclose () verursacht einen Segmentierungsfehler
Ich habe eine tabulatorgetrennte Textdatei, die ich analysiere. Die erste Spalte enthält Zeichenfolgen des FormatschrX
, woherX
bezeichnet einen Satz von Zeichenfolgen, z. B. "1", "2", ..., "X", "Y".
Diese sind jeweils in einemchar*
namenschromosome
, da die Datei analysiert wird.
Die Textdatei ist in der ersten Spalte lexikographisch sortiert, d. H. Ich werde eine Anzahl von Zeilen haben, die mit "chr1" und dann "chr2" usw. beginnen.
Bei jedem "chrX" -Eintrag muss ich eine andere Datei öffnen, die diesem Eintrag zugeordnet ist:
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
Ich habe die FunktionopenSourceFile
das ist wie folgt definiert:
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);
}
}
Das Problem ist, dass meine Anwendung mit einem Segmentierungsfehler beendet wird, der vom ersten Chromosom zum zweiten Chromosom übergeht (vonchr1
zuchr2
) in der folgenden Zeile, in der ich die erste Chromosomendatei schließe, die ich geöffnet habe:
fclose(merbaseIn);
Ich weiß, dass ich nicht vorbeigehefclose
Ein NULL-Zeiger, da ich bis zum Segmentierungsfehler Daten aus dieser Datei lese. Ich kann dies sogar in eine Bedingung einwickeln und bekomme trotzdem den Fehler:
if (merbaseIn != NULL) {
fclose(merbaseIn);
}
Weiter weiß ichopenSourceFile
funktioniert (zumindest fürchr1
, beim Einrichten des ersten Dateihandles vonFILE*
), weil meine Anwendung analysiertchr1
Zeilen und liest Daten aus demFILE*
Quelldatei richtig.
Worum geht es hier?fclose
Aufruf, der einen Segmentierungsfehler verursacht?