Std :: vector初始化为垃圾.奇怪的行为.关于什么事情的任何想法?

max*_*max 0 c++ stl vector

我的班级有这个成员.

  std::vector<AvaWrapper> m_controls;
Run Code Online (Sandbox Code Playgroud)

在我的构造函数中,我打电话

  m_controls.clear()
Run Code Online (Sandbox Code Playgroud)

然后我调用一个成员函数再次执行m_controls.clear(),但它会断言一个断言.调试器显示m_controls有50万或更多条目,但它们都不是有效的,因为当我展开树时调试器显示"错误:表达式无法评估".所以,我的直觉是这个类没有正确创建,因为这个代码确实有效,但后来我从这个类派生了一个类,我调用new()来创建父类.它作为基类的新角色正在爆发.但是这个指针显示所有其他成员变量都有有效数据,所以我的预感是错误的.构造函数也被调用了.有任何想法吗?谢谢.

UPDATE2:

Train::Train() : SpriteWindowFrame(200)
{
  s_mutexProtectingTheGlobalData = new wxMutex();
  m_window_rect = NULL;
  m_thread = NULL;
  m_ok = false;
  m_accumulate_timer = new wxTimer();
  m_accumulate_timer->SetOwner(this, ACCUMULATE_TIMER_ID);

  m_autohide_timer = new wxTimer();
  m_autohide_timer->SetOwner(this, AUTOHIDE_TIMER_ID);

  m_autohide = false;
  m_autohide_period = 5000;
  m_controls.clear();
}
Run Code Online (Sandbox Code Playgroud)

更新:

//This version works.
SpaceInit::SpaceInit()
{
  //Use INI config store. If you need something else, just
  //create the appropriate object.
  m_config_store = new IniConfigStore();

  //Start up config. 
  Init(); 

  m_t = new Trains();
  return;
}

SpaceInit::~SpaceInit()
{
  wxDELETE(m_config_store);
  return;
}
Run Code Online (Sandbox Code Playgroud)

我可以这样做:m_t-> SomeMemberFunctionThatManipulatesVector()

它的工作原理.

这个没有

SpaceInit::SpaceInit():Trains()
{
  //Use INI config store. If you need something else, just
  //create the appropriate object.
  m_config_store = new IniConfigStore();

  //Start up config. 
  Init(); 
  return;
}
Run Code Online (Sandbox Code Playgroud)

我做不到:SomeMemberFunctionThatManipulatesVector()

在向量上炸毁.

我刚刚注意到这个指针确实在Train()默认的consturctor中搞砸了.我认为不是,但确实如此.Trains构造函数运行但是一切都被删除了.

My Trains构造函数代码由工厂运行.只是初始化事物,新事物等等.SpaceInit是用SpaceInit创建的*t = new SpaceInit(); 火车是一个派生类,所以也许它与它有关?

And*_*erd 7

这句话有问题:

我后来从这个类派生了一个类,我调用new()来创建父类.

从类派生时,不要调用new()来创建父类.在运行子构造函数的第一行之前,已经调用了父构造函数.

我怀疑你的问题可能就在这个地区.也许您可以向我们展示发生这种情况的代码.