在 c 中编译后出现分段错误



我用 c 编写了以下程序,但在使用
Linux 编译后gcc -std=c99 -O2 -DCONTEST -s -static -lm
我遇到了分段错误,但我不知道为什么。我搜索并发现分段错误主要是关于内存问题,但我在代码中找不到任何内容。这是程序:

int main()
{
    FILE *file_in, *file_out;
    file_in = fopen("file.in.txt", "r");
    fscanf(file_in, "%d", &N);
    fscanf(file_in, "%lf", &a);
    fscanf(file_in, "%lf", &b);
    fscanf(file_in, "%lf", &c);
    fclose(file_in);
    file_out = fopen("file.out.txt","w");
    fprintf(file_out, "%d", M);
    fprintf(file_out, "%s", "n");
    fprintf(file_out, "%d", a);
    fprintf(file_out, "%s", " ");
    fclose(file_out);
    return (0);
}

我使用您的输入文件来测试您的代码,它产生了正确的结果。

我相信可能的原因是对file_in的空指针尊重您需要检查 fopen 的返回值以确保它不是 NULL

 file_in=fopen("file.in.txt", "r");
 fscanf(file_in, "%d", &N);

将上面的代码更改为以下内容会有所帮助。

 file_in=fopen("file.in.txt", "r");
 if (file_in == NULL) {
    perror("failed to open file.in.txt"); 
    return 1;
 }
 fscanf(file_in, "%d", &N);

您可以从查看以下行开始:

qsort(p, num_elements, sizeof *p, compar);

函数的第三个参数应该获取每个元素的字节数(http://www.cplusplus.com/reference/cstdlib/qsort/)。所以我认为它应该是sizeof(SomeDataType)而不是sizeof(*p)。Sizeof(指向 p 的指针)应返回 4(在 x32 位体系结构上)或 8(在 x64 体系结构上),而数组中每个元素的实际大小为 12 字节(double + int)。

您还可以检查用于调用函数 qsort1 的 M 的实际值。它是否在您的阵列的实际范围内 (100000)?

相关内容

  • 没有找到相关文章

最新更新