【发布时间】:2017-07-20 12:30:42
【问题描述】:
我在 C 中的这个 Mergesort 程序中找不到错误。 它总是显示分段错误。
这是我的合并排序代码:
我认为问题可能出在这里:
void merge(int *a, int i, int mid, int n) {
int l, m, k, b[10];
l = i;
m = mid + 1;
k = 0;
while (l <= mid && m <= n) {
if (a[l] > a[m])
b[k++] = a[l++];
if (a[m] > a[l])
b[k++] = a[m++];
}
while (l <= mid)
b[k++] = a[l++];
while (m <= n)
b[k++] = a[m++];
for (k = 0; k < n; k++)
a[i++] = b[k];
return ;
}
【问题讨论】:
-
你的第二个 while 循环没有花括号
-
使用
gcc中的-ggdb3标志重新编译您的代码,并在像gdb这样的调试器中运行它。然后您可以backtrace到源代码中段错误的位置。 -
仅仅因为您认为问题可能出在您的部分代码中的某个模糊位置,并不意味着您应该只发布该部分。如果问题不存在,那么仅发布它根本没有用。发布不完整的代码并期望人们猜测其余部分的作用并不完全礼貌。您应该发布编译程序所需的最少代码量。这不是那个。
-
@ja08prat while 循环中只有一个语句,所以我觉得没有必要......
-
@underscore_d 我发布了整个代码,但 id 并没有让我因为代码部分太多它显示了我发布这部分的原因,因为它与其余部分一样有最大的错误机会部分是调用合并函数并将数组分成更小的数组
标签: c sorting merge segmentation-fault