将指针数组传递给3D数组:访问冲突异常(C ++)

时间:2018-05-21 20:43:24

标签: c++ arrays pointers

我正在开发一个C ++ minecraft克隆,其中Chunk对象保存一个指向其相邻块(邻居)的指针列表。一个块最多可以有6个邻居,但是如果一个块在一侧没有邻居,那么该阵列中的元素就是一个nullptr。 Chunks有块结构的3D数组,它有一个数据成员:type(int)。 Chunks将他们的块和一组指向其邻居块的指针传递给渲染器:

Block (*neighbor_blocks[6])[CHUNK_SIZE][CHUNK_SIZE][CHUNK_SIZE];

for (int i = 0; i < 6; i++) {
    if (neighbors[i] == nullptr) {
        neighbor_blocks[i] = nullptr;
    }
    else {
        neighbor_blocks[i] = &(neighbors[i]->blocks);
    }
}

renderer.gen_buffer(blocks, neighbor_blocks);

它调用的方法的签名如下所示:

void BlockRenderer::gen_buffer(Block blocks[CHUNK_SIZE][CHUNK_SIZE][CHUNK_SIZE], Block (*neighbor_blocks[6])[CHUNK_SIZE][CHUNK_SIZE][CHUNK_SIZE]);

我相信这会产生一系列指向我的3D Block数组的指针:

Block (*neighbor_blocks[6])[CHUNK_SIZE][CHUNK_SIZE][CHUNK_SIZE])

为了测试我的指针数组,我做了以下几点:

if (neighbor_blocks[4] != nullptr) {
    printf("%d\n", neighbor_blocks[4][0][0][0]->type);
}

使用块初始化块数组中的每个元素,因此在任何块上调用块[0] [0] [0]应该不是问题,如您所见,每个neighbor_blocks元素都使用nullptr初始化或者给出指向块的块数组的指针。但是,我的打印行有时会导致此异常:

0xC0000005:访问冲突读取位置0x003F63D8。

我的方法是否能使指向3D数组的指针数组正确?我是否正确访问了数据?有时候不会抛出异常,向我暗示我正在访问错误的内存,有时我可以访问我正在访问的内容,但有时我的程序无法访问它。

0 个答案:

没有答案