我正在尝试这样做,以便在创建对象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;
}
答案 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