2014-02-16 5 views
3

вот функцию, что у меня есть проблемы с:C++: индекс вне диапазона

ivec sort_index(vec list, int length) { //UNSORTED VECTOR OF INPUT VALUEAS 

ivec index; 
index = zeros_i(N); 
float temp = 0; 
int temp2 = 0; 

for (int j = 0 ; j<N ; j++){ 
     index[j]=j; // VALUES IN INCREASING ORDER 
} 

int i = 1; 
while (i < length){ 
     for (int k = i; list[k - 1] > list[k]; k--){ 
      temp = list[k - 1]; //BUBBLE SORT 
      list[k - 1] = list[k]; 
      list[k] = temp; 

      temp2 = index[k - 1]; //IN THE SAME MOMENT - DATA IS BEING SHUFFLED 
      index[k - 1] = index[k]; 
      index[k] = temp2; 
      } 
     i++; 
    } 

return index; //FUNCTION RETURNS VECTOR WITH SHUFFLED VALUES 

N такой же, как length и длина list

Я отлажена этот код в Visual Studio 2012 и Я обнаружил, что есть проблема в строке:

for (int k = i; list[k - 1] > list[k]; k--){ 

Проблема связана с ошибкой вне диапазона.

Я могу предоставить стек вызовов, если это необходимо.

Помогите мне с изменением этого while и for loop только для того, чтобы сохранить функциональность sort_index() function?

С наилучшими пожеланиями,

JR

+0

Вы не обнаружили отрицательных значений k. –

+0

Поместите 'k &&' перед этим условным тестом. – WhozCraig

ответ

3

На второй итерации

for (int k = i; list[k - 1] > list[k]; k--){ 

к равна 0 и list[k - 1] будет вызывать исключение,

2

Конечно, это должно быть:

для (int k = i; (k> 0) & & (список [k - 1]> список [k]); k -) {

, поскольку в противном случае, кажется, нечего останавливать k от падения начала массива.

+0

Это решило проблему! Спасибо Тиму! –

Смежные вопросы