下面的代码是我试图实例化一个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/

10-09 18:16