Почему unsortedArray изменяется во время работы моего кода? - PullRequest
1 голос
/ 15 мая 2019

Я хочу отсортировать указанный массив 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;
}

Ответы [ 2 ]

1 голос
/ 15 мая 2019

У вас неопределенное поведение, потому что 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 значения.

0 голосов
/ 15 мая 2019

Почему это меняется?Потому что arr1Counter или arr2Counter (или оба) могут быть больше, чем размер массивов, к которым вы их используете.

С меньшим количеством деталей:

   for (i = 0; i < 9; i++){
        for (j = 0; j < 9; j++){
             //maybe increment either here
        }
    }

Это может пойтивыше 9. Итак, вы можете повредить данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...