그래서 세 가지 클래스가 있습니다. 하나의 메인 클래스, ClassA, 하나의 기본 클래스, ClassB, 그리고 하나의 상속 된 클래스, ClassC가 함께 작동하지만, 프로그램을 닫으면 'Access violation writing location'오류가 발생합니다. 그래서 난 단지 클래스 C에게닫을 때 액세스 위반 오류가 발생했습니다.
를 게시 할 예정입니다 단지 기본 클래스를 ClassA .H
ClassA
{
public:
ClassA(void) : player_(NULL), bullet_(NULL) {};
~ClassA(void);
void Update();
void fireBullet(int posx, int posy, int speed);
private:
ClassB* player_;
ClassB* bullet_;
};
를 ClassA의 .CPP
void ClassA::Update()
{
ClassA* pointer = this;
player_->Update(*pointer);
if(bullet_->IsAlive())
bullet_->Update(*pointer);
}
void fireBullet(int posx, int posy, int speed)
{
//make it active, set its position and speed
}
클래스 B입니다 : 여기
는 설정이다클래스 C .h
ClassC : public ClassB
{
public:
ClassC() : posx_(0), posy_(0) {};
virtual void Update(ClassA &a);
private:
int posx_;
int posy_;
}
ClassC의 .CPP
void ClassC::Update(ClassA &a)
{
if(spacebar == pressed)
a.fireBullet(posx_, posy_, 10);
}
은 내가 어딘가에 참조하는 오류를 느낄하지만 난 어디 있는지 알고하지 않습니다. 이 문제는 글 머리 기호가 생성 될 때만 발생하므로 프로그램 전체에서 스페이스 바를 누르지 않고 프로그램을 닫지 않으면 프로그램이 정상적으로 종료됩니다. 그러나 런타임에 스페이스 바를 누르면 액세스 위반 오류가 발생합니다. ClassA 소멸자를 확인했지만 소멸자에 무언가가 있는지 여부에 관계없이 문제가 발생합니다.
관련 코드 만 표시하려고했습니다. bullet_ 및 player_를 초기화하는 데 사용되는 initialse 함수가 있지만 문제와 관련성이없는 것은 아닙니다.
소멸자 :
를 ClassA 를 ClassA : ~를 ClassA (무효) { player_을 삭제; 삭제 bullets_; }
ClassB가와 ClassC
~Class {};
또한
player_ 및 bullet_이를 ClassA에서 함수에 초기화됩니다 나는 알 수
ClassA::Initialise()
{
ClassB* player = new ClassC;
player->Initialise();
player_ = player;
ClassB* bullet = new ClassD; //ClassD is also inherited from B
bullet->Initialise();
bullet_ = bullet;
}
언제 포인터에 개체에 * 유효한 * 주소를 할당합니까? * Class *가 * by by value assignment 또는 copy-construction에 나타나면, [Rule of Three] (http://en.wikipedia.org/wiki/Rule_of_three_ (C % 2B % 2B_programming)) 미준수. 코드를주의 깊게 확인하십시오 (또는 더 나은 점은 스마트 포인터를 사용하면 걱정할 필요가 없습니다). 대부분은 모두 디버거를 연결하고 * debug * this를 사용합니다. 당신이 당신이 어디에 있는지 어떻게 알 수있는지를 꽤 많이 알려주는 호출 스택을 가지고 행복하게 던질 것입니다 (여러분이 스택을 손상시키지 않는다고 가정 할 때). – WhozCraig
A, B, C의 소멸자를 볼 수 있습니까? – IdeaHat
Linux를 사용하는 경우 Valgrind에서 프로그램을 실행할 수 있습니까? http://valgrind.org/docs/manual/quick-start.html – nodakai