1

「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;
};

「ブロック.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();関数を呼び出すと、真EXC_BAD_ACCESS (code=1, address = 0x0)かどうかをチェックする行でエラーが発生することactiveです。私が読んだのは、変数が存在しない場合に返されるものです。コードの何が問題になっていますか?

ここで関数 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
                }
            }
        }
    }


}
4

1 に答える 1

2

この文

Block* m_pBlocks[32][32][32];

32 x 32 x 32 の NULL ポインターを定義します。したがって、これらの NULL ポインターで -> を試行すると、失敗します。

ブロックを作成するか、割り当てる必要があります。

Block m_pBlocks[32][32][32];

Block* m_pBlocks[32][32][32];
m_pBlocks[x][y][z] = new Block;
于 2013-05-26T03:26:50.510 に答える