我用 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)?