Почему мой тот же самый код на C дает несовместимые результаты при компиляции - PullRequest
1 голос
/ 24 марта 2019

Я написал некоторый алгоритм сортировки.Для простоты я выбрал небольшой массив с уникальными значениями.Всякий раз, когда я компилирую код несколько раз, я получаю правильный ответ, но иногда я получаю другой ответ с ошибкой.Я хочу знать, что является причиной проблемы.Напоминаю, что я использую тот же код.

Я использую GCC 4.2.1

Я пробовал на онлайн-компиляторе, он дает правильный ответ.

#include <stdio.h>

int main(){
  int i,j,k,l;
  int A[10]={2,10,6,24,1,-5,23,0,12,-100};

  for(i=0;i<10;i++){
    if(A[i+1]<A[i]){
      l=A[i+1];
      for(j=0;j<=i;j++){
        if((A[j]<A[i+1])&&(A[j+1]>A[i+1])){
          for(k=i;k>=j;k--){
            A[k+1]=A[k];
          }
          A[j+1]=l;
        }
        else if(A[0]>A[i+1]){
          for(k=i;k>=0;k--){
            A[k+1]=A[k];
          }
          A[0]=l;
        }
      }
    }
  }

  for(i=0;i<10;i++){
    printf("%d\n",A[i]);
  }
}

иногда он дает: {-100, -5, 0, 1, 2, 6, 10, 12, 23, 24,} Иногда он дает: -791216026, -100, -5, 0, 1, 2, 6,10, 12, 23, прерывание прерывания: 6

Ответы [ 3 ]

1 голос
/ 24 марта 2019

Ваша программа читает за массивом.

Когда i равно 9, A[j+1] читает за массивом, когда i == j, что разрешено вашим for(j=0;j<=i;j++) условием остановки цикла.

Это также относится к A[k+1]

0 голосов
/ 24 марта 2019

Речь идет не о вашей компиляции. Это может произойти, если вы запускаете один и тот же файл несколько раз.

так как вы обращаетесь к A [10], который не содержит определенного значения, ваша программа может вести себя по-разному, если значение в A [10] больше 24, это значение остается на своей позиции, и правильный ответ будет распечатайте, иначе он будет распространяться где-то между вашими номерами. так что вы теряете свое последнее число (24), и случайное значение попадает в ваш массив.

0 голосов
/ 24 марта 2019

Дает тот же результат для меня {-100, -5, 0, 1, 2, 6, 10, 12, 23, 24}, причина, по которой вы можете получить странные числа, состоит в том, что в массиве заканчивается индекс, но если код не изменился, это не должно произойти.

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