gpt4 book ai didi

c - 不确定为什么冒泡排序代码有段错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:50:18 24 4
gpt4 key购买 nike

您好,我正在使用 gdb 调试我的冒泡排序代码,但我不明白为什么它总是在 if(a[j] < a[j-1] 中断

这是我的冒泡排序函数

void sort(int a[], int n) {
int i, j, nswaps, tmp;
for(i = 0; i < n; i++) {
nswaps = 0;
for(j = 0; j > i; j++) {
if(a[j] < a[j-1]) {
tmp = a[j];
a[j] = a[j-1];
a[j-1] = tmp;
nswaps++;
}
}
if(nswaps == 0) break;
}
}

请帮帮我谢谢!!

更新后的代码:仍然存在段错误

void sort(int a[], int n) {
int i, j, nswaps;
for (i = 0; i < n; i++) {
nswaps = 0;
for (j = 1; j > i; j++) {
if (a[j] < a[j-1]) {
int tmp;
tmp = a[j];
a[j] = a[j-1];
a[j-1] = tmp;
nswaps++;
}
}
if (nswaps == 0) break;
}

最佳答案

在外层循环的第一次迭代中(当i的值为0时),内层循环变成了无限循环,因为j的值从0开始并且不断增加。最终 j 变得足够大,您的程序可以访问一些未分配的内存,从而导致段错误。

此外,在内循环的第一次迭代中,j 的值为 0,因此 a[j - 1] 将尝试访问绑定(bind)到您的程序。

关于c - 不确定为什么冒泡排序代码有段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52527340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com