使用 memset 防止“可变大小的对象可能未初始化”
Posted
技术标签:
【中文标题】使用 memset 防止“可变大小的对象可能未初始化”【英文标题】:Use of memset to prevent ''variable-sized object may not be initialized' 【发布时间】:2017-01-07 22:11:16 【问题描述】:我正在尝试使用下面的代码将值设置为 2D 数组(设想游戏板或某个网格),但我收到“可变大小的对象可能未初始化”错误。
我尝试使用 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;
【问题讨论】:
您告诉我们memset
,但不费心向我们展示您是如何使用它的?
奇怪的是,你把int
放在前面声明的board
的前面,但是d
还是未知的。
另外,d^2
也不是解决d
的方法。请改用d*d
。
@BoPersson 非常感谢
【参考方案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 章,初始化(强调我的)
要初始化的实体的类型应该是一个未知大小的数组或者一个完整的 不是可变长度数组类型的对象类型。
【讨论】:
亲爱的 Sourav,非常感谢。我现在明白了,也谢谢你的出处。以上是关于使用 memset 防止“可变大小的对象可能未初始化”的主要内容,如果未能解决你的问题,请参考以下文章