试图研究时消失的Bug 这是我在C++编程时遇到的最奇怪的事情。
这是我的主文件:试图研究时消失的Bug 这是我在C++编程时遇到的最奇怪的事情。,c++,debugging,C++,Debugging,这是我的主文件: #include <iostream> #include "lib/utils.h" using namespace std; int main(int argc, const char *argv[]) { cout << bin2dec(101000010); return 0; } 很简单,您的问题对我来说是堆栈或堆崩溃——可能是堆栈,因为函数的所有操作都在堆栈上。如果不在程序的其他地方调用一些令人讨厌的未定义行为,就无法解决
#include <iostream>
#include "lib/utils.h"
using namespace std;
int main(int argc, const char *argv[]) {
cout << bin2dec(101000010);
return 0;
}
很简单,您的问题对我来说是堆栈或堆崩溃——可能是堆栈,因为函数的所有操作都在堆栈上。如果不在程序的其他地方调用一些令人讨厌的未定义行为,就无法解决此类问题 编辑:哦,是的,你可以先初始化
dec
,举个例子
int dec;
创建
dec
但从不为其提供初始值(如0)。然后向其添加值,最终得到一个随机结果。您没有初始化dec
int dec = 0;
您需要在函数中将
dec
初始化为零:
int dec = 0;
通过不初始化它,它从内存中变量位置的任意随机crud开始。调用
cout这个小错误是您没有初始化dec
变量
更大的错误是,在编译时,您不习惯添加-Wall
和-O2
(当您编写的程序变得更加复杂时,这会导致很多痛苦)
-Wall
启用所有警告,-O2
需要优化(优化包括代码路径分析,该分析会对未初始化的变量发出警告)。这非常常见-欢迎来到未定义行为的世界。@Doug也许你可以向我解释问题是什么?至少,你应该明确地初始化dec。这可能是不确定性原理的一种表现吗?@Benjamin:因此有了“海森堡”这个词。你一看到它就动,快来。始终使用-墙。有时候,墙是不够的。使用-Wall和优化进行编译会发现未初始化的变量。@David Hammen:是的。。。请求优化对于查看更多警告非常重要。编辑了我的回复。Wall未启用所有警告。有相当多的警告-沃尔没有抓住。我使用-Wall-Wold样式cast-Woverloaded virtual-Wshadow。如果不是因为GNU对标准库的实现产生了大量噪音,我会将-Weffc++添加到组合中。获得更多警告的优化请求仅适用于g++,即使在-O0
..@Gerado,clang也会警告未初始化的变量。你不应该:P错误越奇怪,越“愚蠢”你犯了一个错误:P我们都去过那里,我们都会再次去那里
int dec = 0;
int dec = 0;