函数参数的值随机变化(但不会从代码中修改)

时间:2014-06-04 15:34:57

标签: c++

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

此外,在使用调试模式并逐步完成此功能时,我注意到它有时会在第一次之前回来,而我认为不应该发生。我想这可能是一些微不足道的错误,但我不太擅长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;
}

1 个答案:

答案 0 :(得分:0)

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

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

lengthMetric(lengthMetric)什么也没做。将其更改为lengthMetric(metric)我的项目得到了一些结果,没有一个变量被更改。

顺便说一句,不要在zip中包含文件夹DebugRelease和文件*.sdf*.ncb

等内容