我想对给定的unsortedArray
数组进行排序。在此之前,我需要执行以下步骤。但是它总是要取数字9,然后重复数字8
#include<stdio.h>
int main(){
int unsortedArray[] = {9,8,7,6,5,4,3,2,1};
int arr1[9];
int arr2[9];
int arr1Counter = 0;
int arr2Counter = 0;
int i;int n;
for(i=0; i<9; i++){
// n = unsortedArray[i];
int j;
for(j=0; j<9; j++){
if(unsortedArray[j] != unsortedArray[i]){
if(unsortedArray[j] > unsortedArray[i]){
arr2[arr2Counter] = unsortedArray[i];
arr2Counter++;
}else{
arr1[arr1Counter] = unsortedArray[i];
arr1Counter++;
}
}
}
}
int k;
for(k=0; k<9; k++){
printf("%d ", unsortedArray[k]);
}
return 0;
}
答案 0 :(得分:1)
您有未定义的行为,因为arr2[9]
溢出。在您的嵌套循环中,这部分
arr2[arr2Counter] = unsortedArray[i];
arr2Counter++;
被执行36次。因此,您具有超出范围的访问权限,这会导致未定义的行为。在我的机器上,8 7 6 5 4 3 2 1
被打印,但是程序由于堆栈损坏而崩溃。
考虑程序的逻辑。 for (j = 0; j < 9; j++) {
中的部分总共执行了72
次,并且每次将条目添加到arr1
或arr2
中。它们都可以各自保存10
个值,因此它们不能保存所有72
个值。
答案 1 :(得分:0)
为什么要更改?因为arr1Counter
或arr2Counter
(或两者)的大小可能大于您使用它们访问的数组的大小。
细节较少:
for (i = 0; i < 9; i++){
for (j = 0; j < 9; j++){
//maybe increment either here
}
}
可能会超过9。 因此,您可以破坏数据。