使用 memset 来防止 ''variable-sized object may not be initialized'
Use of memset to prevent ''variable-sized object may not be initialized'
我正在尝试使用下面的代码将值设置为二维数组(设想一个游戏板或一些网格),但我收到 'variable-sized object may not be initialized' 错误。
我尝试使用 memset 解决它,但无济于事。
非常感谢,如果能提供一些提示,我们将不胜感激。
// constants
#define DIM_MIN 3
#define DIM_MAX 9
// board
int board[DIM_MAX][DIM_MAX];
void init(void)
{
int highest = d^2;
for (int i = 0; i < d; i++)
{
for (int j = 0; j < d; j++)
{
int board[i][j] = highest - 1;
}
}
if (d % 2 == 0)
{
int board[d-1][d-2] = 2;
int board[d-1][d-3] = 1;
}
}
问题出在 for
循环体中的代码,它说
int board[i][j] = highest - 1;
你想要的可能是
board[i][j] = highest - 1;
if
条件体也是如此。
为了详细说明错误消息,int board[i][j] = highest - 1;
尝试定义一个无法初始化的新 VLA (variable length array)。
引用 C11
,章节 §6.7.9,初始化(强调我的)
The type of the entity to be initialized shall be an array of unknown size or a complete
object type that is not a variable length array type.
我正在尝试使用下面的代码将值设置为二维数组(设想一个游戏板或一些网格),但我收到 'variable-sized object may not be initialized' 错误。
我尝试使用 memset 解决它,但无济于事。
非常感谢,如果能提供一些提示,我们将不胜感激。
// constants
#define DIM_MIN 3
#define DIM_MAX 9
// board
int board[DIM_MAX][DIM_MAX];
void init(void)
{
int highest = d^2;
for (int i = 0; i < d; i++)
{
for (int j = 0; j < d; j++)
{
int board[i][j] = highest - 1;
}
}
if (d % 2 == 0)
{
int board[d-1][d-2] = 2;
int board[d-1][d-3] = 1;
}
}
问题出在 for
循环体中的代码,它说
int board[i][j] = highest - 1;
你想要的可能是
board[i][j] = highest - 1;
if
条件体也是如此。
为了详细说明错误消息,int board[i][j] = highest - 1;
尝试定义一个无法初始化的新 VLA (variable length array)。
引用 C11
,章节 §6.7.9,初始化(强调我的)
The type of the entity to be initialized shall be an array of unknown size or a complete object type that is not a variable length array type.