1. ホーム
  2. c++

ダイナミックアロケーションを使用しないランタイム時のアレイサイズは許容されますか?

2023-08-31 16:05:17

質問

私は数年間C++を使用しています。今日、いくつかのコードを見ましたが、これは完全に合法なのでしょうか?

int main(int argc, char **argv)
{
    size_t size;
    cin >> size;
    int array[size];
    for(size_t i = 0; i < size; i++)
    {
        array[i] = i;
        cout << i << endl;
    }

    return 0;
}

GCCでコンパイルされています。

を使わずに、どのようにして実行時にサイズを決定することができるのでしょうか? new または malloc ?

再確認のため、いくつかググってみましたが、私のコードと似たようなコードはすべてストレージサイズエラーを出すと主張されています。

DeitelのC++ How To Programのp.261にもCommon Programming Error 4.5のところに書いてあります。

自動配列や静的配列のサイズを宣言するのに使えるのは定数のみである。

教えてください。

どのように解決するのですか?

C99で有効です。

C99標準はスタック上の可変サイズ配列をサポートしています。おそらく、あなたのコンパイラもこの構成をサポートするように選択したのでしょう。

とは異なることに注意してください。 mallocnew . gcc と同じように、スタック上に配列を確保します。 int array[100] と同じように、スタックポインタを調整することでスタック上に配列を確保します。ヒープの確保は行われません。これはまるで _alloca .