2014-12-17 2 views
-4

안녕하세요 저는 C++ 프로그래밍을 시작한 지 오래지만 다른 언어로는 몇 년의 경험이 있습니다. 현재 나는 최종 판타지 스타일 게임에서 AI 괴물과 싸우는 기본 게임을하고 있습니다.포인터 문제가 있음

챔피언 클래스는 AbstractMonster 클래스에서 상속되며 플레이어는 선택에서 시작 몬스터를 선택할 수 있기를 원합니다. 그러나 현재로서는 내가 이것을 작동시킬 수있는 것처럼 프로그래밍 된 것이 있습니다. 나머지를 얻을 수 있어야합니다.

문제는 내가 가지고있는 플레이어 몬스터에 대한 포인터가있는 것입니다. . 위치 0x00000000 쓰기 액세스 위반.

이 내가 순간

#include "AbstractMonster.h" 
#include "Champion.h" 

class mainGame{ 
public: 
    void createMonster() 
private:  
    AbstractMonster* playerMonster = nullptr; 
} 

.cpp 파일 내의 기능에 사용하고 헤더 파일의 유일한 부분입니다 도움이 많이 될 것입니다

void mainGame::createMonster(){  
    playerMonster = new Champion(); //this is the line the errors at and it highlights playerMonster 
} 

을 따르고 나는 이틀 동안이 문제가 있었으므로 감사하겠습니다.

+0

그렇다면 입력! = 1 인 경우 어디에서 메모리를 할당합니까? – Leeor

+2

문제를 확인할 코드가 충분하지 않습니다. – IdeaHat

+0

어딘가에 널 포인터가 있습니다. 즉, 오브젝트를 가리 키지 않는 포인터입니다. 위의 입력이 1이 아닌 경우에 발생할 수 있습니다. –

답변

1

Access violation writing location 0x00000000.new 개체에 할당 된 적이없는 포인터에 액세스하고 있다고 알려줍니다. playerMonster를 사용하고있는 위치를 확인하고 그것이 유효한 지 확인합니다. 확인하는 좋은 방법은 당신이 주먹을 선언 할 때 playerMonster이 경우는 여전히 널 if (plasyerMonster == nullptr)을보고 그것을 동일한 nullptr 당신이이 검사를 실행 사용하는 장소에서 그런

AbstractMonster* playerMonster = nullptr; 

로 설정되어 있습니다.

+0

null ptr이있는 행운이 없습니다 –

+0

@FraserS 디버거에서 액세스 위반시 브레이크를 사용하십시오. 그런 다음 중지 할 때 호출 스택 위로 돌아가서 프로그램에서 액세스 위반을 일으키는 코드 줄을 봅니다. – drescherjm

+0

nullptr을 추가하는 데 운이 없었습니다. 충분한 정보가 포함되어 있지 않았습니다. –