我正在尝试遍历对象的指针数组,它可以正常工作,直到它到达输入变量。不知何故,它会引发size变量并继续这样做直到应用程序崩溃。造成这种奇怪行为的原因是什么?
Array::Array(int in)
{
size = in;
Heltal *h[sizeof(size)];
for(int i = 0; i < size; i++){
h[i] = new Heltal(Array::Random(1, 100));
}
}
答案 0 :(得分:4)
替换此行:
Heltal *h[sizeof(size)];
有了这个:
std::vector<Heltal *> h(size);
sizeof(size)
是一个编译时常量,并且计算为size
类型的长度(以字节为单位)。这可能是值4,这意味着h
总是4个元素长。结果你可能会溢出数组。
向量构造函数将在堆上分配动态数量的元素。
答案 1 :(得分:0)
我不知道你的想法是什么sizeof()
,但它正在做的是返回变量size
的大小,我猜测它是int
所以它可能正在返回4
。这样做的结果是,数组的大小是根据int
的大小而不是基于in
的值来确定的。
在C99中我会说使用Heltal *h[size]
,但C ++不允许这样做。在这种情况下,我建议您只使用std::vector<Heltal*>
并根据需要调整其大小。