gpt4 book ai didi

c - 排序时出现段错误

转载 作者:行者123 更新时间:2023-11-30 21:15:00 25 4
gpt4 key购买 nike

当使用称为管排序的算法对数组进行排序时,我实现了它,当我运行它时,我遇到了段错误。尽管我在网上搜索并没有类似的错误,但我决定在这里发布。这个错误可能是因为我将 for 循环中的 aux 数组的大小设置为数组的大小,是否有更好的方法来编写此代码?下面是源码。

#include <stdio.h>

void TuborSort(int* array) {
int aux[5] = { 0, 0, 0, 0, 0 };
int i;

for (i = 0; i < sizeof(array); i++) {
aux[array[i]]++;
}

int j = 0;
for (i = 0; i < 5; i++) {
while(aux[i]-- > 0) {
array[j++] = i;
}
}
}

int main() {
int array[6] = {2, 5, 1, 4, 1};
int i;

TuborSort(array);

for (i = 0; i < sizeof(array); i++)
printf("%d ", array[i]);

return 0;
}

最佳答案

你是说aux[array[i]]++ aux 的长度只有 5 个元素。所以 array 中的第二个元素(5) 太大,无法用作 aux 的索引.

<小时/>

作为旁注,您使用 sizeof 的方式是错误的,您需要将数组的长度作为附加参数传递。

正如 Alexey 在 main 中指出的那样for 应该是:

size_t i;
for (i = 0; i < sizeof(array) / sizeof(*array); i++)

关于c - 排序时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15730435/

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