0

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)

誰でもこれを説明できますか?私は完全に混乱しています。

4

1 に答える 1