我用c语言编写了以下程序,但是使用
在Linux中编译后
gcc -std = c99 -O2 -DCONTEST -s -static -lm
我遇到细分错误,我不知道为什么。
我搜索发现分段错误主要与内存问题有关,但是我在代码中找不到任何东西。
这是程序:
your_matrix = [[0, 1., 0., 0., 0.],
[1., 0., 0., 0., 0.],
[0., 0., 0., 1., 0.,],
[0., 0., 0., 0., 1.],
[1., 0., 3., 4., 4.]]
your_last_row = your_matrix[-1]
#add indices
reference_row = [(idx, value) for (idx, value) in enumerate(your_last_row)]
ref_row_sorted = sorted(reference_row, key=lambda x: x[1])
#extract indices
indices = [x[0] for x in ref_row_sorted]
new_matrix = []
for row in your_matrix:
new_row = [row[x] for x in indices]
new_matrix.append(new_row)
答案 0 :(得分:1)
我使用您的输入文件来测试您的代码,它会产生正确的结果。
我认为可能的原因是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);
答案 1 :(得分:0)
您可以从以下几行开始:
qsort(p, num_elements, sizeof *p, compar);
该函数的第三个参数应采用每个元素的字节数(http://www.cplusplus.com/reference/cstdlib/qsort/)。所以我认为应该是sizeof(SomeDataType)而不是sizeof(* p)。 Sizeof(指向p的指针)应返回4(在x32bit体系结构上)或8(在x64体系结构上),而数组中每个元素的实际大小为12个字节(double + int)。
还可以检查用于调用函数qsort1的M的实际值。它在数组的实际范围内(100000)吗?