【发布时间】:2012-11-25 22:50:06
【问题描述】:
我刚刚发生了一个非常奇怪的情况 - 在使用调试器时,它显示某个布尔变量的值是 true,但是当我打印它(或使用它进行任何其他操作)时,它的行为就像0(即假)。
我可以做些什么来修复这个错误?恐怕这是环境错误,因此发布代码示例将毫无意义。 (一个隐藏的、烦人的内存管理错误不可能是原因,对吧?),在这种情况下,我想指出,我会惊讶地发现我的环境没有配置好(我在这个项目上工作环境超过一年)。
到目前为止我:
- 在我的项目属性中仔细检查编译器没有对代码进行任何优化。
- 尝试重新打开 Visual Studio 并清理并重新构建项目
- 在网上搜索解决方案(没有找到)。 我使用的是 Visual Studio 2010,我的编程语言是 C++
关于代码共享请求:
很抱歉,我无法发布代码(我的老板不会很高兴看到它在网络上运行)....如果您能够就问题的可能原因提供一些想法,它将太好了,我会自己在代码中寻找线索,检查这些原因是否真的导致了问题。然而,为了清楚起见,这里有几行代码让我很头疼:
bool dir = getNode(location)->getNext()->getDirection(); //dir is displayed as "true" in the debbuger
int toPush = (dir == 1) ? 1 : 0; //"toPush" is displayed as "0" in the debbugger
cout<<dir<<endl; //both output 0.
cout<<(dir == true)<<endl;
根据您的要求,我附上屏幕截图。请注意屏幕右下角的“dir”值是“true”,右边的程序输出以 0 结尾(对应于“cout
【问题讨论】:
-
变量初始化了吗?在 Release 中运行它会发生什么?
-
请发布一个重现问题的小代码示例。
-
显示您的代码,以及演示问题的屏幕截图。
-
在发布模式下这个变量确实是真的......我认为该值已初始化但我不是 100% 确定,因为初始化是棘手的部分,我目前正在调试它。就算没有初始化,为什么调试器和c++会有不同的默认值?
-
即使变量未初始化,它也应该显示相同的值,除非它以不同的方式解释(错误的格式字符串?)或在断点和初始化之间更改。
标签: c++ visual-studio-2010 visual-c++