gpt4 book ai didi

c++ - 将二维指针数组初始化为C++中的成员变量

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:16 25 4
gpt4 key购买 nike

我一直在 Stack Overflow 和 cplusplus 论坛上搜索,但没有成功。我是 c++ 的新手,目前正在为一个学校项目开发游戏。我在创建、填充、销毁二维指针数组时没有问题,并且在我的游戏中使用了一个,而且效果很好。

我为玩家创建了一个新类,并将二维数组移动到该类中。现在,当我尝试运行我的程序时,出现了段错误。谁能告诉我为什么会这样? 大胆我不能简单地使用 std::vector<>因为二维指针数组是必需的。

class Player
{
public:
Player();
...
short** allocate_2d_array();
....
protected:
short **board;
static const short BOARD_DIMENSIONS;
...
};

函数

short** Player::allocate_2d_array()
{
short **array2d;

// Insert columns
for(int i = 0; i < this->BOARD_DIMENSIONS; i++)
{
array2d[i] = new short[this->BOARD_DIMENSIONS];
// Fill in the numbers
for(int j = 0; j < this->BOARD_DIMENSIONS; j++)
{
array2d[i][j] = 0;
}
}

return array2d;
}

在哪里调用

Player::Player()
{
this->turns_taken = 0;
// Prepare the board
this->board = this->allocate_2d_array();
...
}

最佳答案

在为它分配任何内存或初始化它之前,for 循环主体的第一行取消引用指针 array2d(使用方括号运算符)。

为避免此问题,您必须在进入 for 循环之前分配数组的第一个维度。一旦您分配了这个指针数组,您就可以分配 BOARD_DIMENSIONSshort 数组,并将指向它们的指针存储在第一个数组的元素中。

类似于:

short** array2d = new short*[BOARD_DIMENSIONS];
for (size_t u = 0; u < BOARD_DIMENSIONS; ++u)
{
array2d[u] = new short[BOARD_DIMENSIONS];
// You could then use memset to initialize the array, or
// use a for loop, like in your example:
for (size_t v = 0; v < BOARD_DIMENSIONS; ++v)
{
array2d[u][v] = 0;
}
}

使用 operator delete []

确保在使用完内存后正确释放它

关于c++ - 将二维指针数组初始化为C++中的成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com