700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言fclose导致系统崩溃 c - fclose()导致分段错误 - 堆栈内存溢出

c语言fclose导致系统崩溃 c - fclose()导致分段错误 - 堆栈内存溢出

时间:2020-01-02 01:53:46

相关推荐

c语言fclose导致系统崩溃 c - fclose()导致分段错误 - 堆栈内存溢出

我有一个制表符分隔的文本文件,我正在解析。 其第一列包含格式为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 %s\n", filename);

exit(EXIT_FAILURE);

}

}

问题是我的应用程序在下一行从第一个染色体到第二个染色体(从chr1到chr2 )退出分段错误,在那里我关闭了我打开的第一个染色体文件:

fclose(merbaseIn);

我知道我没有传递fclose一个NULL指针,因为直到Segmentation Fault,我正在从这个文件中读取数据。 我甚至可以在条件中包装它,我仍然得到错误:

if (merbaseIn != NULL) {

fclose(merbaseIn);

}

此外,我知道openSourceFile有效(至少对于chr1 ,在设置FILE*的第一个文件句柄时),因为我的应用程序解析chr1行并正确地从FILE*源文件中读取数据。

这个fclose调用导致分段错误发生的原因是什么?

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