c++ - 复制二维结构数组 C++

标签 c++ arrays multidimensional-array struct

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

相关文章:

php - MySQL SELECT 查询在没有记录的情况下返回多维数组

c++ - 使用与其他共享库链接的共享库

c++ - 奇怪的调用栈,会不会是asio使用openssl的问题?

php - SplFixedArray 是在幕后用 C/C++ 实现的吗?

c++ - 用更少的内存在 C++ 中实现二维数组

php - 根据搜索字符串出现次数对数组进行排序 php

c++ - O'Reilly 的 "Objective-C Pocket Reference"声称 C++ 不支持动态调度,这是真的吗?

c++ - 为什么不允许从字符数组进行 std::string 初始化?

arrays - 对实现 Equatable 的结构数组的操作

Python:将 (4,1,2) 数组与 (4,1) 相乘得到 (4,1,2) 数组