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です. この結果、配列のサイズはの値ではなくのサイズに基づいて固定されます。int4intin

C99 では use と言いますHeltal *h[size]が、C++ ではそれが許可されていません。この場合、std::vector<Heltal*>代わりに a を使用し、必要に応じてサイズを変更することをお勧めします。

于 2012-11-30T00:42:58.763 に答える