我正在使用C++和SFML 2.0開發一個學校項目,它將於週二發佈,而我最近剛剛遇到了這個問題。 我已經把箭頭放在最新的調用堆棧的位置。 這些是我懷疑可能在其中存在錯誤的代碼部分。我對C++也很新,我知道我做了很多錯誤的事情。訪問衝突寫入位置0x00000000。 C++/SFML遊戲
這是在我的Background
類中,它裝載我所有的瓷磚,設置它們的位置和瓷磚類型等等。
的GetWayPointList
返回到我EnemyManager
類
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;
}
調用棧本身說TileShooter v0.1.exe!Background::Load(QuadTree*quadTree) Line 68 + 0x2e bytes
瓷磚的載體。 68行是箭頭所在的位置。
如果你需要更多的代碼/信息只是說。任何可能出錯的地方都會大受歡迎。 最好的問候,弗雷德裏克·W^
編輯
我編輯的一些代碼,包括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;
}
這並沒有真正解決,而是向下移動的錯誤,我已經將我的箭頭移到了Call Stack最新的呼叫位置。
你在哪裏定義'瓷磚'?我想你的問題是'tile'或者太小或者還沒有被分配,或者'tile'中的元素沒有被分配。 –
Tile在Background.h中定義爲Tile * tile [32] [32]; –
永遠不要理解學校對巨大的多維陣列的癡迷 –