2011-05-26 76 views
0

可能重复:
Undefined/Uninitialized default values in a class非零默认值

我有C++中的类,它是创建和销毁相当频繁。为了调试,我添加了一个bool mDebug给这个类,我想用#ifdef打开。但是,我发现即使在未定义ifdef时也会显示与调试变量相关的消息。当我在构造函数中抛出值时,我发现它具有随机值 - 35,68等。所以我假设存在某种内存泄漏,并且该类正在分配已使用的内存。但是,我已经对它进行了纯化,并没有显示在那个时候读取的未初始化的内存或任何超出界限的写入。 valgrind也没有太大的帮助。由于各种原因,gdb在这段代码上效果不佳。我可以转储变量的地址,但有其他想法吗?

感谢

+4

我认为这将需要一些示例代码。具体来说:你如何使用'ifdef'?你的构造函数是如何设置的? – 2011-05-26 16:39:32

+1

不要让我们猜测,发布一些代码。 – NPE 2011-05-26 16:40:39

+0

为什么不直接使用DEBUG标志而不是将该功能委托给类变量?这听起来就像那个电话游戏'中国语言'(?) – freitass 2011-05-26 17:15:04

回答

1

我假设你的“bool mDebug”添加到类是静态成员,因为这会(自动)初始化为零。所以,我认为它必须是一个“常规”数据成员。

这意味着你根本就没有设置初始值与构造体(无论是哪个,你也想包在#ifdef“基地/成员初始化列表”或明确的,因为你的成员定义被包装在一个#ifdef )。

默认情况下,成员未设置为零(您必须明确地执行此操作)。除非出现真正奇怪的事情,否则我怀疑这是内存泄漏/错误。

+0

我认为常规数据成员也初始化为0。那么我的错误。其他成员似乎正在初始化为0,但也许这只是运气。 – 2011-05-26 21:11:22