下面的代码是我试图实例化一个2d数组,但它的实例化不正确:
代码:
FILE* kernalFile = fopen(argv[1], "r");
int rKernalSize;
fscanf(kernalFile, "%d", &rKernalSize);
unsigned int rKernal[rKernalSize][rKernalSize];
运行该代码后的断点中的数据:
rKernalSize值:
Name : rKernalSize
Details:3
Default:3
Decimal:3
Hex:0x3
Binary:11
Octal:03
rKernal值:
Name : rKernal
Details:0x7ffffffe0cd0
Default:[0]
Decimal:[0]
Hex:[0]
Binary:[0]
Octal:[0]
或
rKernal[][0]
它应该是
rKernal[3][3]
,这是文件,您可以查看它。如果需要:3 -1 1 0 1 0 -1 0 -1 1 3 -1 1 0 1 0 -1 0 -1 1 3 -1 1 0 1 0 -1 0 -1 1
TLDR:
rKernalSize
是正确的(3),但是当我用rKernal[rKernalSize][rKernalSize]
创建2d数组时,它没有正确地实例化!它将设置为rKernal[][0]
可能是默认值,但应该是rKernal[3][3]
最佳答案
忘记调试器告诉你的。在代码中,请立即执行以下操作:
unsigned int rKernal[rKernalSize][rKernalSize];
发表声明:
printf ("%d\n", sizeof(rKernal) / sizeof(unsigned int));
看看它打印出了什么(希望
9
)。可能在编译时创建的调试信息不足以正确确定可变长度数组的大小。
举例来说,尽管
gcc
支持可变长度数组,gdb
本身在2009年末还不能正确地处理它们,在2010年10月的文档中仍然没有提到它们。所以我怀疑这就是问题所在,特别是因为我在上面提供的测试代码输出
9
与预期一致。关于c - 创建一个有问题的二维阵列(C),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4029616/