c++ - 为什么打印一个变量会改变它的值?

标签 c++ printing stdout cout

我有一个小函数,它应该根据机器学习算法进行预测。该功能无法正常工作,所以我输入了一个打印语句来检查该值,然后突然间它开始工作了。当我注释掉打印行时,它再次停止工作。关于为什么会发生这种情况,我是否遗漏了什么?

int makePrediction( const InstanceT & instance, bool biased ){
  double dotProduct = ( biased ? instance * _weights + _bias : instance * _weights ); 
  std::cout << "dotProduct = " << dotProduct << std::endl;
  return ( dotProduct > 0 ? 1 : -1 );
}

由于某种原因产生了不同的结果

int makePrediction( const InstanceT & instance, bool biased ){
  double dotProduct = ( biased ? instance * _weights + _bias : instance * _weights ); 
  return ( dotProduct > 0 ? 1 : -1 );
}

为了显示给定相同输入的结果是不同的,我调用这个函数:

std::vector<InstanceT> _instances = populate_data() //this works for both versions
for ( int i = 0; i < _instances.size(); i++ ){
  std::cout << "prediction: " << makePrediction( _instances[i], true ) << std::endl;
}

有什么想法吗?

最佳答案

这通常有两个原因:

  1. 并发问题。如果您的程序是多线程的,您可以使用调试输出来掩盖竞争条件。尝试像 helgrind 这样的 MT 调试器。
  2. 损坏的堆栈。尝试在您的程序上运行 valgrind,看看它是否干净。

当然,这些都是非常通用的建议,但您必须更好地说明您的问题才能获得更好的建议:-)。

关于c++ - 为什么打印一个变量会改变它的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552406/

相关文章:

c++ - 在 C++ 中将指针传递给函数

javascript - 调用 window.print() 时会触发什么事件?

python - 我如何只打印每 5 行

css - 在样式表中使用 media ="print"与 @media print 声明的权衡是什么?

bash - 将标准输出重定向到正在运行的进程

C++ 继承和名称隐藏

c++ - 将整数输入数组的方法比 scanf() 或 cin 更快?

c++ - 将一个程序的输出通过管道传输到另一个程序不适用于该特定程序

c++ - 在 VS2013 中使用可变参数模板时为 "ambiguous call to overloaded function"

c++ - 是否有一个标准函数可以打印/监视标准输入文件的内容,同时将数据留在标准输入中?