2014-08-29 2 views
-2

кода-то вроде: -Ошибка при сравнении в массиве: ошибка сегментирования

#include <iostream> 

using namespace std; 
int main(int argc, char *argv[]) { 
    int array[6]={1,2,3,4,5,6}; 
    for (int i = 0; i <= 5 ; i++){ 
     for (int j = 5; j <= i ; j--){ 
      if(array[i] + array[i+1] == array[j]){ 
       cout << array[i] << " + " << array[i+1] << " = " << array[j]; 
      } 
     } 
    } 
} 

Я новичок на самом деле, и мой учитель дали мне вопрос, и когда я решаю, я получил ошибку. Скажите, пожалуйста, какая ошибка.

+2

Вы знаете, как использовать отладчик? Эти вещи действительно могут помочь уменьшить проблему. – user2030677

+0

это ошибка за пределами границ. можете ли вы это заметить? это почти тривиально –

+0

И ваш вложенный цикл будет выполняться только при i = 5. Проверьте это. – Arpit

ответ

2

В вашем втором состоянии, for (int j = 5; j <= i ; j--){ вы декремент j, но проверьте, если j меньше, чем i. Это всегда будет правдой. Кроме того, j станет, таким образом, ошибкой сегментации.

2
if(array[i] + array[i+1] == array[j]){ 

Вы запускаете эту строку кода, когда i == 5. Это означает, что вы тестируете array[6], что выходит за пределы.

1

В последней итерации цикла вашего «для I», я имеет значение 5.

Вы затем получить доступ к элементу массива [I + 1], т.е. массив [6], который не существует. Значениями массива являются массив [0], массив [1], ..., массив [5].

0

Попробуйте этот код!

#include <iostream> 

using namespace std; 
int main(int argc, char *argv[]) { 
    int array[6]={1,2,3,4,5,6}; 
    for (int i = 0; i <5 ; i++) //Fix 1 
    { //Run this loop till array[4] because in if condition you are accessing array[5] which is the last element of array 
     for (int j = 5; j >= i ; j--) //Fix 2 
     { //Run this loop till j is greater than i 
      if(array[i] + array[i+1] == array[j]) 
      { 
       cout << array[i] << " + " << array[i+1] << " = " << array[j] << "\n"; 
      } 
     } 
    } 
} 

Выход:

1 + 2 = 3 
2 + 3 = 5 
Смежные вопросы