gpt4 book ai didi

c - fclose() 导致段错误

转载 作者:太空狗 更新时间:2023-10-29 15:45:39 25 4
gpt4 key购买 nike

我有一个正在解析的制表符分隔的文本文件。它的第一列包含格式为 chrX 的字符串,其中 X 表示一组字符串,例如,“1”、“2”、...、“X”, "is"。

当文件被解析时,这些都存储在一个名为 chromosomechar* 中。

文本文件按字典顺序排列在第一列,即我将有许多行以“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);
}
}

问题是我的应用程序退出并在下一行出现从第一个染色体到第二个染色体(从 chr1chr2)的段错误,我在此处关闭我打开的第一个染色体文件:

fclose(merbaseIn);

我知道我没有向 fclose 传递 NULL 指针,因为在出​​现段错误之前,我一直在从该文件中读取数据。我什至可以将它包装在一个条件中,但我仍然会遇到错误:

if (merbaseIn != NULL) {
fclose(merbaseIn);
}

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

导致出现段错误的 fclose 调用是什么?

最佳答案

valgrind --db-attach=yes --leak-check=yes --tool=memcheck --num-callers=16 --leak-resolution=high ./yourprogram args

段错误很可能是由堆上的内存损坏引起的,而不是任何影响本地的东西。 Valgrind将立即向您显示您进行的第一个错误访问。

编辑:自 2014 年 3.10.0 版以来,--db-attach 选项已被弃用。发行说明指出:

The built-in GDB server capabilities are superior and should be used
instead. Learn more here:

http://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver

关于c - fclose() 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1443164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com