阴影变量问题Qt

时间:2013-07-01 04:29:16

标签: c++ qt

当我尝试实施DBSCAN时,我遇到了在Qt5应用程序中出现故障的问题。

所以我破解了打开调试器以试图找出可能导致问题的原因,它说我在范围内有两个相同变量的副本,一个名为index,另一个名为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)

任何人都能解释一下吗?我完全糊涂了。

1 个答案:

答案 0 :(得分:2)

问题最终导致pointDistanceList QMap太短,因此向前移动索引会超出地图的末尾。 QMap太短,因为在使用insert方法而不是insertMulti方法时会覆盖重复键值。通过将*.insert(key, value更改为*.insertMulti(key, value)来解决此问题。