【发布时间】:2013-05-25 22:41:49
【问题描述】:
“block.h”
enum BlockType
{
BlockType_Default = 0,
BlockType_Grass,
};
class Block
{
public:
Block();
~Block();
bool IsActive();
void SetActive(bool activeParameter);
private:
bool active;
BlockType m_blockType;
};
“block.cpp”
#include "block.h"
Block::Block()
{
m_blockType = BlockType_Grass;
active = true;
}
Block::~Block()
{
}
bool Block::IsActive()
{
return active;
}
void Block::SetActive(bool activeParameter)
{
active = activeParameter;
}
这是我的课。现在我的问题是当我运行程序并调用IsActive(); 函数时,我在检查active 是否为真的行上收到错误EXC_BAD_ACCESS (code=1, address = 0x0)。从我读到的是如果变量不存在则返回的内容。我的代码有什么问题?
这里是我调用函数的地方 main.cpp
Block* m_pBlocks[32][32][32];
void main()
{
for(int x = 0; x < 32; x++)
{
for(int y = 0; y < 32; y++)
{
for(int z = 0; z < 32; z++)
{
printf("x:%d y:%d z:%d",x,y,z);
if(m_pBlocks[x][y][z]->IsActive())
{
//DisplayBlock
}
}
}
}
}
【问题讨论】:
-
无关,但
return active; -
您没有粘贴出现错误的代码,您致电
IsActive。最有可能的是,您错误地调用了IsActive,例如通过取消引用未初始化的指针。 (而且,正如 Chris 所指出的,你可怕的IsActive函数可以重写为return active;。) -
@chris:+1 表示“无关,但返回活跃;” - 让它
const -
您实际上是在为
m_pBlocks中的指针实例化对象吗?如果没有,那么这是你的问题。如果是这样,请在您执行此操作的位置显示代码,以便我们查看问题是否存在。 -
@TylerMcHenry 听听你脑后那个小小的声音。你知道答案会是什么;)