从列表中删除对象

时间:2013-04-28 20:39:32

标签: c++ list pointers

我声明在我的

中声明了std::list<MachineState*> zombs
class CZombieView : public CWindowImpl<CZombieView>
{
public:


   CZombieView();
   void DrawGrid();
   Gdiplus::Bitmap m_BitmapImage;
   Gdiplus::Graphics m_GraphicsImage;

   MachineState zombieTestState;
   Machine<ZombieTraits> zombieMachine;
   MachineState zombieTestState2;
   MachineState zombieTestState3;


   Machine<HumanTraits>humanMachine;
   MachineState humanTestState;
   MachineState humanTestState2;
   MachineState humanTestState3;

   std::list<MachineState*> zombs;
   std::list<MachineState*> humans;
};

我已宣布另一堂课。 Opp.cpp

class Op
{
 public:
   CZombieView * cz;
   MachineState * neighboor;
   MachineState * neighboor2;
   void setNeighboor(MachineState * decoy); //
   void setNeighboor2(MachineState * decoy2);
   virtual void Execute(MachineState& state) = 0;
 };

setNeighboor函数将CZombieView的zombieTestState设置为变量neighboor。当我试图在neighboor设置之后调用cz->zombs.remove(neighboor)时,我得到异常,我在visual studio上的调用栈指向const _Nodeptr _Phead = this->_Myhead; ...我不知道为什么会发生这种情况,或者如果这是从列表中删除对象的错误方法...任何输入将不胜感激

void Op::setNeighboor2(MachineState * decoy2)
{
     neighboor2 = decoy2;
    cz->zombs.remove(neighboor2);
    std::cout<<"SET";
}

我的程序在cz->zombs.remove(neighboor2)处停止,打印声明甚至没有打印出来。

1 个答案:

答案 0 :(得分:0)

您的cz可能未正确初始化。这将解释首先将其解除引用以攻击zombs成员然后在其上调用方法的崩溃。您应该在Op的构造函数中将其设置为nullptr,并在崩溃时检查该值。

相关问题