我有一個製表符分隔的文本文件,我正在解析。 第一列包含 chrX 格式的字元串,其中 X 表示一組字元串,比如," 1"," 2"。 "x","y"。
這些都存儲在一個名為 chromosome的char* 中,因為該文件被解析。
文本文件按字母順序排序,換句話說,我將有一些行從"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 %sn", filename);
exit(EXIT_FAILURE);
}
}
問題是,我的應用程序退出了從第一個染色體到第二個( 從 chr1 到 chr2 )的分割錯誤,我關閉了第一個染色體文件:fclose(merbaseIn);
我知道我沒有傳遞 fclose的空指針,因為直到分割錯誤,我正在從這個文件中讀取數據。 我甚至可以用一個條件包起來,但我仍然有錯誤:if (merbaseIn!= NULL) {
fclose(merbaseIn);
}
而且,我知道 openSourceFile 是( 至少對於 chr1,在設置 FILE*的第一個文件句柄時),因為我的應用程序解析 chr1 行,並正確地從 FILE* 源文件讀取數據。
這個 fclose 調用引起一個分段錯誤的原因是什麼?
如果觉得《c语言打开文件出现分段故障 c fclose() 导致分段故障_segmentation-fault_开发99编程知识库...》对你有帮助,请点赞、收藏,并留下你的观点哦!