2013-04-28 4 views
0

я объявил объявило 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 устанавливает zombieTestState в CZombieView к переменной neighboor. Когда я пытаюсь позвонить cz->zombs.remove(neighboor) после того, как соседка уже установлена, я получаю исключения и стек вызовов на визуальных студийных точках до const _Nodeptr _Phead = this->_Myhead; ... Я не уверен, почему это происходит, или если это неправильный способ удаления объект из списка ... Любой вход был бы оценен

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

Моя программа останавливается прямо на cz->zombs.remove(neighboor2) и оператор печати не даже получить печатные.

+0

Возможно, вам стоит показать нам фактический код, предоставляющий ошибку. – Xymostech

+0

@ Xymostech Я добавил, где моя программа останавливается ... Я не знаю, если это какая-то помощь? –

+0

Похоже, что-то вроде коррупции. Это произойдет где-то еще в вашем коде, потому что нет ничего плохого в 'setNeighboor2'. – john

ответ

0

Возможно, ваш cz не был правильно инициализирован. Это объясняет крах при первом разыменовании его, чтобы убить члена зомби, а затем вызвал метод на это. Вы должны установить его в nullptr в конструкторе Op и проверить значение при его сбое.

+0

спасибо Скотту. это было –

Смежные вопросы