与while循环时的问题

时间:2013-08-27 13:29:43

标签: c++ qt loops while-loop

我有一个向量QVector<float> dist;,我保持欧几里德距离的所有维度。我保持尺寸如下:

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循环(计算结果为错误)时,应用程序不再崩溃。

1 个答案:

答案 0 :(得分:1)

因为我&lt; t和j可能等于i + 1,在访问[j]时可能会产生超出范围的错误。即有时j = t,所以你试图访问[t]。它看起来不正确。

可能是正确的
while( j < i)

而不是

while( j <= i)