函数参数的值随机更改(但它们不会从代码中修改)
Values of the function parameters are changing randomly (but they're not modified from the code)
我必须在我的班级项目中与朋友实现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
相关文章:
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 修改 VS Code 中的默认C++代码段
- 如何修改代码以打印出数组 v2
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 代码错误修改
- 我在代码中收到一个运行时错误,该错误如何通过修改最多一个元素来查找数组是否可以变得不减少
- 如何跟踪通过外部代码修改类变量的所有位置
- "check if member exists using enable_if"中修改的代码不起作用
- 我在让我的代码输出整个链表时遇到问题.它只是输出我修改过的一些文本文件,而不是整个东西
- 张量流内核代码修改
- 代码审查:常量字符 * 修改
- 如果我制作一个代码,每个线程都会修改数组的完全不同的部分,则将保持缓存相干性
- 如何查看修改后的代码,其中对内联函数进行了预处理
- 是否可以有一个零成本assert(),这样代码就不必在调试和发布版本之间进行修改
- Matlab 编码器错误 "for loop index expressions.." 如何修改代码?
- 如何修改CUDA代码以获得100%的GPU负载
- 如何修改此基于MFC的代码片段以使用自己选择的窗口类名
- 是否可以用最少的代码更改来修改函数调用
- 重新配置C++代码以处理“警告:未按顺序修改和访问参数”
- 针对windows的Linux c++代码修改