700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言打开文件出现分段故障 c fclose() 导致分段故障_segmentation-fault_开发99编程知识库...

c语言打开文件出现分段故障 c fclose() 导致分段故障_segmentation-fault_开发99编程知识库...

时间:2024-02-22 21:22:56

相关推荐

c语言打开文件出现分段故障 c fclose() 导致分段故障_segmentation-fault_开发99编程知识库...

我有一個製表符分隔的文本文件,我正在解析。 第一列包含 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 調用引起一個分段錯誤的原因是什麼?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。