我正在创建“船舶”游戏。我生成 mField,它将作为我的模板,用船只填充敌人的战场。为此,我想将 mField 复制到 eField。
我的 mField 是结构“Field”的动态二维数组,它在我的 cpp 文件中是这样填充的:
mField = new Field*[x+3];
for (int i = 0; i < x+3; ++i)
mField[i] = new Field[y+3];
在我的头文件中这样声明
Field **mField;
现在我尝试复制
memcpy(&eField, &mField, sizeof(&mField));
虽然现在当我用船填充我的 mField 时,我在敌方区域看到了 mField 的精确拷贝,而不是干净的区域。 这就是我将我的字段传递给改变我的字段的函数的方式:
void Map::changeField(int x, int y, string ciag,Field **field) {
...
}
我是不是在我的函数中犯了一些错误,它同时更改了两个数组,或者我以错误的方式复制了数组?
最佳答案
你正在将敌人的字段指针复制到你自己的字段,这是行不通的,你正在共享字段。
使用 std::vector<Filed>((x+3)*(y+3))
, 所以一个 !D 字段数组,并将其作为 2D 访问。
如果您需要使用二维数组,请像以前一样为每一行再次分配新的字段(提示:创建一个以通用方式创建您的 mField 和 eField 的函数)。
关于c++ - 复制二维结构数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53228937/