2014-02-16 249 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和是我調試在Visual Studio 2012這個代碼的list

的長度和我發現存在一個問題:

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

該問題涉及超出範圍的錯誤。

如果需要,我可以提供調用堆棧。

任何人都可以幫我改變這個whilefor循環只是爲了保存sort_index()功能的功能嗎?

最好的問候,

JR

+0

您沒有看到k的負值。 –

+0

將'k &&'放在該條件測試前面。 – WhozCraig

回答

3

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

k的第二次迭代等於0,list[k - 1]將調用異常

2

當然,它應該是:

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

因爲否則似乎沒有什麼能夠阻止k從數組的開頭刪除。

+0

這解決了這個問題!謝謝蒂姆! –