数组变量未在For循环中正确分配

时间:2017-06-28 19:57:55

标签: c++ debugging for-loop struct

我正在尝试这样做,以便在创建对象blockA1时为struct BlockA中的每个RegType成员分配一个单独的地址值。它们应该在创建时从分配给blockA1的地址递增(在本例中为3)。

它适用于regA(regA.addr打印为4),但是当我运行此代码时,为regB.addr打印的值是一些奇怪的数字,好像它根本没有赋值。 / p>

这段代码是使用宏构建的,但是我尝试自己运行它,正如你在这里看到的那样,并且它表示变量A周围的堆栈已损坏。

有谁知道问题是什么?

 struct RegTypeA {
      int addr ; int val ;
};

 struct RegTypeB {
    int addr ; int val ;
};

 struct BlockA {
    RegTypeA regA ; RegTypeB regB ;
    int addr;
    BlockA(int address);
};

BlockA::BlockA(int address) {
    addr = address;
    const int y = +1 +1;
    int A[y];
    for (int i = 0; i <= y; i++) {
        A[i] = address;
        address++;
    }
    regA.addr=A[1]; regB.addr=A[2];

}

int main()
{
    BlockA blockA1(3);

    std::cout << blockA1.regA.addr << std::endl;
    std::cout << blockA1.regB.addr;

    std::cin.get();
    return 0;
}

1 个答案:

答案 0 :(得分:3)

关于您使用int A[y]值定义的数组y==2,它实际上可能包含两个条目,即A[0]A[1]。但请注意,对A[2]的访问超出范围,因为C ++中基于0的索引A[2]实际上代表第3个元素。

在保持代码接近您的情况下,您可以按如下方式更正问题:

    int A[y];
    for (int i = 0; i < y; i++) {  // Note < instead of <=
        A[i] = address;
        address++;
    }
    regA.addr=A[0]; regB.addr=A[1];  // note 0,1 instead of 1,2