2013-04-28 3 views
0

에서 개체를 제거 내내가 선언 한 목록

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; 
}; 

std::list<MachineState*> zombs을 선언 나는 다른 클래스를 선언했다. 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 함수는 변수 neighboor에 CZombieView의 zombieTestState를 설정한다. 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)에서 중단 감상 할 수있다 및 인쇄 문을도 인쇄되지 않습니다.

+0

아마도 실제 오류 코드를 표시해야합니다. – Xymostech

+0

@Xymostech 내 프로그램이 멈추는 위치를 추가했습니다 ... 어떤 도움이 필요한지 모르겠습니다. ?? –

+0

일종의 부패로 보입니다. 'setNeighboor2'에 문제가 없으므로 코드 내의 다른 곳에서 일어 났을 것입니다. – john

답변

0

cz이 제대로 초기화되지 않았을 수 있습니다. 그것은 zombs 멤버를 obatin하고 나서 그 메소드를 호출하기 위해 우선 참조를 해제 할 때의 크래시를 설명합니다. Op의 생성자에서이 값을 nullptr로 설정하고 충돌 할 때 값을 검사해야합니다.

+0

감사합니다. 그거였다 –

관련 문제