回答
我假设你正在使用C99编译器(支持动态大小的数组)。你的代码中的问题是,当编译器看到你的变量声明时,它不知道数组中有多少元素(我在这里也假定,从编译器错误length
不是编译时间常量)。
您必须手动初始化数组:
int boardAux[length][length];
memset(boardAux, 0, length*length*sizeof(int));
你不能这样做。 C编译器不能在堆栈上做这么复杂的事情。
您必须使用堆和动态分配。
你真的需要做什么:
- 计算大小(N米的sizeof(元素))内存的需要
- 调用malloc(大小)来分配内存
- 创建访问者:int * access(ptr,x,y,rowSize){return ptr + y * rowSize + x; }
使用* access(boardAux,x,y,size)= 42与矩阵进行交互。
还有一个问题,为什么我会收到一个错误无效使用数组与未指定的界限?012fprintf(“%d”,board [i] [j]); – helloWorld 2010-06-21 08:00:51
-1 C99允许在堆栈中作为用户代码进行动态分配(不包括初始化)。没有必要执行动态分配。 – 2010-06-21 08:02:15
@helloWorld因为数组维必须被知道。 – 2010-06-21 08:55:39
您收到此错误,因为在C语言中你不能使用带有变长数组初始化。你得到的错误信息基本上说明了一切。
6.7.8 Initialization
...
3 The type of the entity to be initialized shall be an array of unknown size or an object type that is not a variable length array type.
你在哪里找到这个,你能给我一个链接吗? – helloWorld 2010-06-21 08:11:42
@helloWorld:这是来自语言标准(C99)。你可以在这里获得TC3更新的“工作”副本http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf – AnT 2010-06-21 08:13:10
有些主题,如果你有一些人总是不相信你只提供非正式的解释。可变长度数组是其中的一个主题。 +1用于引用标准。 – 2010-06-21 08:30:25
这给了错误:
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";
声明阵列
int boardAux[length][length];
分配初始值为零的最简单的方法后正在使用for循环,即使它可能有点冗长
int i, j;
for (i = 0; i<length; i++)
{
for (j = 0; j<length; j++)
boardAux[i][j] = 0;
}
对于C++单独声明和初始化像t他的..
int a[n][m] ;
a[n][m]= {0};
- 1. 可变大小的对象可能未初始化 - C错误
- 2. 错误:可变大小的对象可能未被初始化?
- 3. 变量大小的对象可能未被初始化,错误
- 4. 代码:Blocks Mingw编译器错误:可变大小的对象可能未初始化
- 5. 无法编译Java错误变量可能未被初始化
- 6. 编译错误:变量可能未被初始化
- 7. 可变大小的对象可能不被初始化
- 8. 可变大小的对象数组可能无法初始化
- 9. 错误变量可能未初始化
- 10. 编译错误变量未初始化
- 11. GCC编译器错误,'p_data'可能未初始化使用
- 12. 分段故障/可变大小的对象可能不被初始化错误C
- 13. 错误:变量c可能尚未初始化
- 14. GCC抱怨:可变大小的对象可能不被初始化
- 15. 可变SC可能尚未初始化
- 16. 为什么“变量可能未被初始化”阻止编译?
- 17. 初始化具有可变大小的
- 18. 错误:变量(Date对象)可能当我编译这段代码,我得到尚未初始化
- 19. 初始化一个对象时发生C++编译错误
- 20. 错误:可能不会初始化可变大小的对象。不确定为什么?
- 21. 文件数组初始化错误:变量可能未初始化
- 22. Java中的变量可能未被初始化错误
- 23. 如何解决变量可能未被初始化的错误
- 24. 对象变量可能尚未初始化
- 25. 变量可能尚未初始化错误
- 26. “本地变量”名称“可能未被初始化”错误
- 27. 变量可能未被初始化错误
- 28. 错误:变量可能未被初始化
- 29. 变量可能未初始化错误和一般建议
- 30. 错误:变量digitMonth可能未被初始化
我也可以用于这个目的malloc,那么第二个问题呢,我在Pavel的回复后写了它 – helloWorld 2010-06-21 08:10:28
@helloWorld:使用堆栈分配数组,'printf(“%d”,boardAux [1] [2])'编译精细。编译器知道尺寸并知道内存中第(1,2)个元素的位置。如果使用动态分配,数组是单维的,并且您必须自己执行数学运算:'printf(“%d”,boardAux [1 * length + 2])' – 2010-06-21 08:39:12
@AndreyT:感谢将错误指向'memset '喊出来。我刚刚纠正了它。 – 2010-06-21 08:39:45