复制2D结构数组C ++

时间:2018-11-09 15:44:56

标签: c++ arrays multidimensional-array struct

我正在创建“船舶”游戏。我生成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) {
    ...
}

我是否在函数中犯了一个错误,即它同时更改了两个数组,或者我以错误的方式复制了数组?

2 个答案:

答案 0 :(得分:1)

您正在敌人区域中复制指向您自己区域的指针,这将不起作用,您正在共享这些区域。

使用std::vector<Filed>((x+3)*(y+3)),即!D字段数组,并以2D形式访问它。

如果需要使用2D数组,请像以前一样为每行再次分配新字段(提示:创建一个以通用方式创建mField和eField的函数)。

答案 1 :(得分:0)

memcpy只需将指针复制到您的基础数组中。它没有复制指针指向的 内容

您的复制功能必须分配新的内存并复制内容(也称为深度复制):

eField = new Field*[x+3];
for (int i = 0; i < x+3; ++i)
{
    eField[i] = new Field[y+3];
    memcpy(efield[i], mField[i], y+3);
}