DBSCAN を実装しようとすると、Qt5 アプリケーションでブレークがスローされるという問題が発生しています。
そこで、デバッガーを開いて問題の原因を突き止めようとしたところ、スコープ内に同じ変数の 2 つのコピーがあり、1 つは と呼ばれindex
、もう 1 つは と呼ばれてindex <shadowed 1>
います。index
スコープ内に変数の別のコピーを作成する方法がわかりません。どちらも2つの異なる値を保持しており、その<shadowed 1>
部分が含まれていない方にはメモリアクセスエラーの場所を指すメンバーが含まれているため、これが使用されていると思います。
QMap<int, Point*> kDistPlot;
for (int i = 0; i < points->size(); i++)
{
Point *point = points->at(i);
QMap<int, Point*> pointDistanceList;
for (int j = 0; j < points->size(); j++)
{
if (i == j)
continue;
Point *distPoint = points->at(j);
int dist = distance(point, distPoint);
Q_ASSERT_X(dist >= 0, __FUNCTION__, "Distance can't be negative...");
pointDistanceList.insert(dist, distPoint);
}
QMap<int, Point*>::const_iterator index = pointDistanceList.begin();
index += k - 1;
Point* kPoint = (*index); //this is where the error is
int kDist = index.key();
kDistPlot.insert(kDist, kPoint);
}
QMap クラス内でこの例外をトリガーします。
Stopped in thread 1 by: Exception at 0x581c79e8, code: 0xc0000005: read access violation at: 0x0, flags=0x0(first chance)
誰でもこれを説明できますか?私は完全に混乱しています。