Отладка кода, который отлично работает на компьютере, но не на SPOJ

0

Этот код работает нормально на моем компьютере, но SPJ сообщает мне, что он получил ошибку сегментации. Не могли бы вы помочь мне отладить его?

#include <iostream> 
using namespace std;
int main() {
    int i, arr[5];
    int j = 0;
    for (i = 0; i<5; i++) 
    {
        cout << "Enter number between 0 to 99 \n";
        cin >> arr[i]        
    }

    while (arr[j] != 42) { 
        cout << arr[j] << "\n";
        j++;
    }
    return 0;
}
  • 1
    То, что вы создаете код для чего-то вроде SPOJ, не означает, что вы не должны правильно его форматировать.
  • 1
    Что касается проблемы, подумайте о том, что произойдет, если в массиве нет значения 42 .
Теги:
debugging
segmentation-fault

1 ответ

2

Ваша петля:

while (arr[j] != 42) { 
  cout << arr[j] << "\n";
  j++;
}

Будет только выход, если кто-то ввел 42. Если они этого не сделали, то j будет увеличено до 5 и более, что означает, что вы попытаетесь получить доступ к индексу массива, которого не существует, поскольку arr имеет всего 5 элементов.

Одним из исправлений будет проверка j когда вы повторяете элементы:

while (j<5 && arr[j] != 42) { 
  cout << arr[j] << "\n";
  j++;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню