奇怪的循环跳跃C++

Strange loop jump in C++

本文关键字:跳跃 C++ 循环      更新时间:2023-10-16

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

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