2014-02-16 180 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

这解决了这个问题!谢谢蒂姆! –