我正在创建“船舶”游戏。我生成mField,这将是我的模板,用舰船填充敌方领域。为此,我想将mField复制到eField中。
我的mField是结构“字段”的动态2D数组,并在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形式访问它。
如果需要使用2D数组,请像以前一样为每行再次分配新字段(提示:创建一个以通用方式创建mField和eField的函数)。