我有一个向量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
循环(计算结果为错误)时,应用程序不再崩溃。
答案 0 :(得分:1)
因为我&lt; t和j可能等于i + 1,在访问[j]时可能会产生超出范围的错误。即有时j = t,所以你试图访问[t]。它看起来不正确。
放
可能是正确的while( j < i)
而不是
while( j <= i)