2013-08-27 48 views
0

我有一個向量QVector<float> dist;我在哪裏維持所有維度的歐幾里德距離。我把尺寸如下:與while循環時的問題

QHash<int, QVector<float> > hash; 

哪裏int是鍵,和值在QVector<float>再次保持。 當我試圖填補dist的代碼如下:

for(int i = 0; i < t; i++) 
    { 
     for(int j = 1; j < t; j++) 
     { 
      while(j <= i) 
       j++; 
      dist.push_back(qPow((a[i] - hash[i].at(point)), 2) + qPow((a[j] - hash[j].at(point)), 2)); 
      qDebug() << "Euclidean distance for Dim" << i << "and Dim" << j << " = " << dist[i]; 
     } 
    } 

循環計算一切,應該的,但崩潰,後一個內存錯誤:在QVector

ASSERT失敗::在「指數超出範圍「...

當我刪除while循環(計算將是錯誤的)應用程序不再崩潰。

+0

後while循環Ĵ將等於t。我懷疑t是散列表中的有效索引 – user1233963

+0

什麼是'a'?什麼是「點」? –

回答

1

由於i < t和j可能等於i + 1,所以在訪問[j]時可能會生成超出範圍的錯誤。即有時候j = t,所以你試着訪問一個[t]。它看起來不正確。

可能會是正確的放

while(j < i) 

代替

while(j <= i) 
+0

但如果我= j案件也不適合我? – Mike

+0

邁克,回答關於'我= j'的問題取決於你的算法。現在我們可以看到,有一個錯誤(有時j == t,錯在哪裏)。請說明,您的算法必須如何工作。 – Ilya

+0

我有一個散列,其中鍵是尺寸 - 散列[0] ... h [3] - Dim_1 ... Dim_4,值是保存座標w.r.t尺寸的向量。例如 - 尺寸1:對於尺寸2,h [0] = {1,2},對於尺寸3,h [1] = {2,1};對於尺寸4,h [2] = {1.4,2.3} h [3] = {0.5,3}。我希望循環計算[i]個元素之間的歐幾里德距離,其中a也是向量用以下代碼預定義的:for(int j = 0; j Mike