저는 C++과 SFML 2.0을 사용하는 학교 프로젝트에 참여하고 있습니다. 화요일 예정이며 최근에이 문제에 착수했습니다. 최근 호출 스택 위치에 화살표를 추가했습니다. 다음은 내가 잘못 생각한 코드 부분입니다. 나는 또한 C++에 대해 아주 새로운데, 나는 잘못한 것들을 많이 알고 있습니다.액세스 위반 작성 위치 0x00000000. C++/SFML 게임
이것은 내 Background
클래스에 있으며, 모든 타일을로드하고, 위치와 타일 타입을 설정합니다.
는 GetWayPointList
내 EnemyManager
클래스 콜 스택 자체가 TileShooter v0.1.exe!Background::Load(QuadTree*quadTree) Line 68 + 0x2e bytes
말한다
void Background::Load(QuadTree * quadTree) {
int tempTiles[32][32] = {... Lots of 1's and 0's in here };
for(int i = 0; i < 32; i++)
{
for(int j = 0; j < 32; j++)
{
---> tile[j][i]->tileType = tempTiles[j][i];
tile[j][i]->setPosition(sf::Vector2f((float)(i*32),(float)(j*32)));
if(tile[j][i]->tileType == 1)
{
quadTree->AddObject(tile[j][i]);
}
else if(tile[j][i]->tileType == 0)
{
tile[j][i]->distanceFromStart = INT_MAX;
tile[j][i]->parent = NULL;
vector<Tile*> tempTiles;
if(tile[j+1][i]->tileType == 0)
tempTiles.push_back(tile[j+1][i]);
if(tile[j-1][i]->tileType == 0)
tempTiles.push_back(tile[j-1][i]);
if(tile[j][i+1]->tileType == 0)
tempTiles.push_back(tile[j][i+1]);
if(tile[j][i-1]->tileType == 0)
tempTiles.push_back(tile[j][i-1]);
tile[j][i]->setSuccessors(tempTiles);
tilesList->push_back(tile[j][i]);
}
}
}
}
vector<Tile*>* Background::GetWayPointList()
{
return tilesList;
}
에 타일의 벡터를 반환합니다. 줄 68은 화살표가있는 곳입니다.
더 많은 코드/정보가 필요한 경우에만 말하십시오. 잘못되었을 가능성이있는 부분에 큰 점수가 부과됩니다. 좀 tile[j][i] = new Tile();
void Background::Load(QuadTree * quadTree) {
int tempTiles[32][32] = {... Lots of 1's and 0's in here };
for(int i = 0; i < 32; i++)
{
for(int j = 0; j < 32; j++)
{
tile[j][i] = new Tile();
tile[j][i]->tileType = tempTiles[j][i];
tile[j][i]->setPosition(sf::Vector2f((float)(i*32),(float)(j*32)));
if(tile[j][i]->tileType == 1)
{
quadTree->AddObject(tile[j][i]);
}
else if(tile[j][i]->tileType == 0)
{
tile[j][i]->distanceFromStart = INT_MAX;
tile[j][i]->parent = NULL;
vector<Tile*> tempTiles;
----> if(tile[j+1][i]->tileType == 0)
tempTiles.push_back(tile[j+1][i]);
if(tile[j-1][i]->tileType == 0)
tempTiles.push_back(tile[j-1][i]);
if(tile[j][i+1]->tileType == 0)
tempTiles.push_back(tile[j][i+1]);
if(tile[j][i-1]->tileType == 0)
tempTiles.push_back(tile[j][i-1]);
tile[j][i]->setSuccessors(tempTiles);
tilesList->push_back(tile[j][i]);
}
}
}
}
vector<Tile*>* Background::GetWayPointList()
{
return tilesList;
}
정말 해결이 아니라 아래로 오류를 이동하지 않았다
를 포함하여 코드를 편집 한
최고 감사합니다, 프레드릭 W
편집, 나는 통화 스택에 최신 통화가있는 곳에서 내 화살표를 움직였습니다.
여기서 '타일'을 정의합니까? 귀하의 문제는 '타일'이 너무 작거나 아직 할당되지 않았거나 '타일'의 요소가 할당되지 않았다는 것입니다. –
타일은 Background.h에서 Tile * tile [32] [32]로 정의됩니다. –
거대한 다차원 배열을 통해 학교에서 강박 관념을 이해하지 못했습니다 –