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

时间:2019-01-31 20:56:53

标签: c segmentation-fault fault

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

2 个答案:

答案 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)吗?