我正在尝试遍历对象的指针数组,它工作得很好,直到它到达输入变量。不知何故,它提高了大小变量并一直这样做,直到应用程序崩溃。是什么导致了这种奇怪的行为?
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));
}
}
替换这一行:
Heltal *h[sizeof(size)];
有了这个:
std::vector<Heltal *> h(size);
sizeof(size)
是一个编译时常量,并计算size
声明类型的长度(以字节为单位)。这可能是 4 的值,这意味着h
它将始终是 4 个元素长。结果,您可能会溢出数组。
向量构造函数将改为在堆上分配动态数量的元素。
我不知道你的想法sizeof()
是什么,但它正在做的是返回变量的大小,size
我猜int
它可能是返回的4
。这样做的结果是您的数组的大小是基于 的大小int
而不是基于 的值而固定的in
。
在 C99 中我会说 use Heltal *h[size]
,但 C++ 不允许这样做。在这种情况下,我建议只使用 astd::vector<Heltal*>
并根据需要调整其大小。