成员初始化:GCC中的错误还是我的想法?

时间:2010-10-22 13:46:04

标签: c++ linux g++ member-initialization

我在班级的私人部分定义了一个枚举类型。我也定义了这种类型的成员。当我尝试在构造函数体中初始化此成员时,我在运行时遇到内存损坏问题。当我通过相同的构造函数中的初始化列表初始化它时,我不会遇到内存损坏问题。我做错了吗?

我将简化代码,如果它是GCC错误,我确信它是我正在组合/继承/等的特定类的组合,但我保证这会抓住问题的本质。在初始化之前,没有任何东西使用这个成员变量,并且在完全构造之前,没有任何东西使用新创建的对象。这个成员的初始化确实是我在体内做的第一件事,当内存损坏发生时,valgrind说它在我初始化变量的行上。 Valgrind说这是一个4号的无效写作。

相关标题代码:


private:  
  enum StateOption{original = 0, blindside};    
  StateOption currentState;

相关的.cpp代码(导致内存损坏和崩溃):


MyClass::MyClass(AClass* classPtr) : 
  BaseClass(std::string("some_setting"),classPtr)
{
  currentState = original;
  ...
}

相关的.cpp代码(不会导致内存损坏和崩溃):


MyClass::MyClass(AClass* classPtr) : 
  BaseClass(std::string("some_setting"),classPtr),
  currentState(original)
{
  ...
}
  

编辑:看看我的“答案”是什么导致了这个。阅读之后,有人可以向我解释为什么会有所作为吗?我没有更改标题中的任何内容,显然目标文件正在重建,因为当我将它们放入时出现我的print语句并且缺少在一个构建下看到错误而不是另一个构建的错误吗?

为了得到一个很好的解释,我会将其标记为这个问题的答案。

1 个答案:

答案 0 :(得分:1)

后人:

似乎make脚本由于某种原因没有获取对这些文件的更改。手动删除对象而不是让makefile中的“干净”目标导致完全重建(这需要一些时间),问题就消失了。