1

我正在尝试遍历对象的指针数组,它工作得很好,直到它到达输入变量。不知何故,它提高了大小变量并一直这样做,直到应用程序崩溃。是什么导致了这种奇怪的行为?

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));
    }
}
4

2 回答 2

4

替换这一行:

Heltal *h[sizeof(size)];

有了这个:

std::vector<Heltal *> h(size);

sizeof(size)是一个编译时常量,并计算size声明类型的长度(以字节为单位)。这可能是 4 的值,这意味着h它将始终是 4 个元素长。结果,您可能会溢出数组。

向量构造函数将改为在堆上分配动态数量的元素。

于 2012-11-30T00:43:57.990 回答
0

我不知道你的想法sizeof()是什么,但它正在做的是返回变量的大小,size我猜int它可能是返回的4。这样做的结果是您的数组的大小是基于 的大小int而不是基于 的值而固定的in

在 C99 中我会说 use Heltal *h[size],但 C++ 不允许这样做。在这种情况下,我建议只使用 astd::vector<Heltal*>并根据需要调整其大小。

于 2012-11-30T00:42:58.763 回答