C ++中的奇怪循环跳转

时间:2012-11-30 00:41:11

标签: c++ pointers for-loop sizeof

我正在尝试遍历对象的指针数组,它可以正常工作,直到它到达输入变量。不知何故,它会引发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));
    }
}

2 个答案:

答案 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*>并根据需要调整其大小。