others - 编译错误:"Variable-sized object may not be initialized"

为什么我接收到"Variable-sized object may not be initialized"错误,以下是代码?


int boardAux[length][length] = {{0}};

时间:

我假设你正在使用一个(支持动态调整大小数组)编译器,你的代码中的问题是,当编译器看到你的变量声明时,它无法知道数组中有多少元素。

必须手动初始化该数组:


int boardAux[length][length];
memset( boardAux, 0, length*length*sizeof(int) );

因为在C语言中不允许使用可变长度数组的初始值设定项,所以,收到此错误,你所得到的错误信息已经说明了。

6.7.8初始化

...

3要初始化的实体类型应为未知大小或不是变长数组类型的对象类型的数组。

这会给出错误:


int len;
scanf("%d",&len);
char str[len]="";

这也会给出错误:


int len=5;
char str[len]="";

但这工作的很好:


int len=5;
char str[len]; //so the problem lies with assignment not declaration

你需要按以下方式放置值:


str[0]='a';
str[1]='b'; //like that; and not like str="ab";

你不能这么做。C 编译器不能在堆栈上做这么复杂的事情。

你必须使用堆和动态分配。

你真正需要做的是:

  • 计算所需内存的大小( n*m*sizeof ( 元素) )
  • 调用 malloc(size) 来分配内存
  • 创建访问器:int* access(ptr,x,y,rowSize) { 返回 ptr + y*rowSize + x ;}

使用 *access(boardAux, x y,size ) = 42与矩阵交互。

...