函数参数的值随机更改(但它们不会从代码中修改)

Values of the function parameters are changing randomly (but they're not modified from the code)

本文关键字:代码 修改 参数 随机 函数      更新时间:2023-10-16

我必须在我的班级项目中与朋友实现NBC(用于在提供的数据集中查找集群)算法。我们遇到了非常奇怪的问题。有几个辅助函数,有问题的一个是kNB.h文件中的kNN(也可能是kEN)。在从程序的主函数传递参数给它之后(例如k=3和p=5),它转到kNN函数并开始随机改变k和p的值,尽管函数代码不应该在任何地方这样做,正如你在下面看到的。

另外,在使用调试模式并逐步执行此函数时,我注意到它有时会在第一个while之前返回,而我认为不应该发生这种情况。我想这可能是一个微不足道的错误,但我不太擅长c++(不幸的是,我们被要求使用它)。你可以从这里下载完整的Visual Studio 2013解决方案:https://dl.dropboxusercontent.com/u/1561186/EDAMI.zip。有人知道为什么会出现这种情况吗?

static vector<int> kNN(int k, int p, Dataset<V>* records)
{
int b = p, f = p;
bool backwardSearch, forwardSearch;
vector<int> tmp;
LengthMetric<V>* lengthMetric = records->getLengthMetric();
backwardSearch = PrecedingPoint(records, b);
forwardSearch = FollowingPoint(records, f);
int i = 0;
while (backwardSearch && forwardSearch && i < k)
{
    if (records->getRecord(p)->getLength() - records->getRecord(b)->getLength() < records->getRecord(f)->getLength() - records->getRecord(p)->getLength())
    {
        i++;
        tmp.push_back(b);
        backwardSearch = PrecedingPoint(records, b);
    }
    else
    {
        i++;
        tmp.push_back(f);
        forwardSearch = FollowingPoint(records, f);
    }
}
while (backwardSearch && i < k)
{
    i++;
    tmp.push_back(b);
    backwardSearch = PrecedingPoint(records, b);
}
while (forwardSearch && i < k)
{
    i++;
    tmp.push_back(f);
    forwardSearch = FollowingPoint(records, f);
}
return tmp;
}

查看类Dataset的第二个构造函数

Dataset(vector<Record<V>*> rrecords,
        LengthMetric<V>* metric = new DumbLengthMetric<V>())
    : records(rrecords),
      lengthMetric(lengthMetric) { // <-------------------

lengthMetric(lengthMetric)不做任何事。将其更改为lengthMetric(metric),我在您的项目中得到了一些结果,没有一个变量被更改。

顺便说一句,不要在zip中包含任何东西,如文件夹Debug, Release和文件*.sdf, *.ncb