使用名为tubor sort的算法对数组进行排序时,我实现了它,当我运行它时,我得到了分段错误。即使我在网上搜索并且没有类似的错误,我决定在这里发帖。这个错误可能是因为我将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;
}
答案 0 :(得分:3)
你说aux[array[i]]++
和aux只有5个元素。所以 array
(5)中的第二个元素太大,无法用作aux
的索引。
作为旁注,您使用sizeof
的方式是错误的,您需要将数组的长度作为附加参数传递。
正如Alexey所说,在main
中,for应该是:
size_t i;
for (i = 0; i < sizeof(array) / sizeof(*array); i++)
答案 1 :(得分:3)
sizeof(array)
函数中的 TuborSort()
不合适。正如你声明array
是int *
而不是6个整数的数组,这不是你想要的。
此外,您需要数组中的元素数量sizeof
,而不是sizeof(array)/sizeof(array[0])
。
答案 2 :(得分:0)
对于了解Java的人来说,这是一个非常常见的错误,c和c ++中的指针的大小通常来自PC上的体系结构32/64位。
一旦你将指针传递给数组,你必须发送它的长度,否则你不能知道它的长度。