【发布时间】:2012-11-20 03:27:20
【问题描述】:
我正在使用 C++ 和 SFML 2.0 进行一个学校项目,它将于周二到期,而我最近刚刚遇到了这个问题。 我在最新的调用堆栈所在的位置上放了一个箭头。 这些是我怀疑其中可能有问题的代码部分。我对 c++ 也很陌生,我知道我做错了很多事情。
这是在我的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;
}
这并没有真正解决,而是将错误向下移动,我将箭头移动到调用堆栈最新调用的位置。
【问题讨论】:
-
你在哪里定义
tile?我猜你的问题是tile太小或尚未分配或tile中的元素未分配。 -
Tile 在 Background.h 中定义为 Tile* tile[32][32];
-
从不理解学校对巨大的多维数组的痴迷
-
通过您的编辑,您让我的回答毫无意义。
-
@Lightness Races in Orbit - 我们或许应该称它们为“老派”,但你是对的。