ダイナミックアロケーションを使用しないランタイム時のアレイサイズは許容されますか?
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標準はスタック上の可変サイズ配列をサポートしています。おそらく、あなたのコンパイラもこの構成をサポートするように選択したのでしょう。
とは異なることに注意してください。
malloc
と
new
.
gcc
と同じように、スタック上に配列を確保します。
int array[100]
と同じように、スタックポインタを調整することでスタック上に配列を確保します。ヒープの確保は行われません。これはまるで
_alloca
.
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】'cout'は型名ではない
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み】delete[]は、オペランド配列のサイズをどのように「知って」いるのでしょうか?
-
[解決済み] 静的メモリアロケーションと動的メモリアロケーションの違い
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】'cout'は型名ではない
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された