C++ 阴影变量问题

C++ 阴影变量问题,c++,qt,C++,Qt,当我试图实现DBSCAN时,我的Qt5应用程序遇到了一个中断问题 所以我打开调试器试图找出问题的原因,它说我在作用域中有两个相同变量的副本,一个名为index,另一个名为index。我不明白我怎么能在作用域中有另一个索引变量的副本?它们都有两个不同的值,其中一个没有部分的值有指向内存访问错误位置的成员,因此我假设这就是正在使用的值 QMap<int, Point*> kDistPlot; for (int i = 0; i < points->size(); i++) {

当我试图实现DBSCAN时,我的Qt5应用程序遇到了一个中断问题

所以我打开调试器试图找出问题的原因,它说我在作用域中有两个相同变量的副本,一个名为
index
,另一个名为
index
。我不明白我怎么能在作用域中有另一个
索引
变量的副本?它们都有两个不同的值,其中一个没有
部分的值有指向内存访问错误位置的成员,因此我假设这就是正在使用的值

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);  
}

有人能解释一下吗?我完全糊涂了。

问题在于pointDistanceList QMap太短,所以向前移动索引超过了映射的末尾。QMap太短,因为使用
insert
方法而不是
insertMulti
方法时会覆盖重复键值。通过将
*.insert(key,value
更改为
*.insertMulti(key,value)

是否有其他名为index的变量?如成员变量?(我假设此代码位于类方法中)不,没有成员变量被命名为index。您能包含实际的错误消息吗?这
index+=k-1;
对我来说非常可疑。如果
k
为0,您将把迭代器向后移动到其范围之外(index-1)。您是否绝对确定
k
的值至少为1?它不会在您显示的代码中的任何地方修改。确定并且您确定列表足够长吗?在任何情况下,问题最有可能出现在代码的其他地方。
 Stopped in thread 1 by: Exception at 0x581c79e8, code: 0xc0000005: read access violation at: 0x0, flags=0x0(first chance)