struct中的整数设置为零

时间:2013-02-12 08:04:05

标签: c arrays struct int

我已经编写了这段代码,但输出并不是我所期望的。我将整数:proj.startP设置为1000,但在执行了一些for循环后,变量再次设置为0

#include <stdio.h>

struct vezelstruct{
    float verd[10][10][10];
    int startP;
};

struct vezelstruct proj;

int main(int argc, char *argv[])
{
    int g, i;

    proj.startP=1000;                           // variable set to 1000
    printf("%i\n", proj.startP);

    for(g=1;g<=10;g++)
    {
        for(i=1;i<=10;i++){
                proj.verd[g][10][i]=0.0;
        }
    }

    printf("should be 1000: %i\n", proj.startP); // it's equal to 0 here
    return 0;
}

我在这里做错了什么?

4 个答案:

答案 0 :(得分:3)

在此处:for(g=1;g<=10;g++)和此处:for(i=1;i<=10;i++)您应该从0开始,以9结束,即for(i = 0; i < 10; i++)

当您尝试访问proj.verd[10][10][10]时,实际上是在尝试访问数组边界外的内存。这会导致未定义的行为,在这种情况下导致将proj.startP重写为0

答案 1 :(得分:1)

您已经溢出了数组并成功进入undefined behavior领域,在您的情况下已覆盖了结构的其他成员。正确的代码应该是:

for(g=0;g<10;g++)
{
        for(i=0;i<10;i++){
                proj.verd[g][9][i]=0.0;
        }
}

答案 2 :(得分:1)

看起来你超出了数组的范围,结果将值设置为零。如果从0到9而不是从1到10,它应该可以工作。

答案 3 :(得分:0)

当您跨越数组边界的边界时,编译器会尝试替换分配给您的堆栈的其他部分中的值。如果它越过堆栈边界,则会出现分段错误。在这里,因为你试图访问多于数组边界,所以它在proj.startP中放置了0。