- ベストアンサー
Visual C++で配列を動的に確保したい
int n; cin >> n; int array[n]; のような配列の確保がしたいです。Visual C++出ない環境ではできるのですが、VC++ではできないようです。VC++でできますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
http://msdn.microsoft.com/ja-jp/library/zb1574zs.aspx ってことで使えません。 new[]で確保するか、std::vector使うとかで対処かと。
その他の回答 (3)
- Yune-Kichi
- ベストアンサー率74% (465/626)
標準C++ (ISO/IEC 14882) では,少なくとも2011年版までにおいて配列型の宣言はconstant-expressionを伴うか省略する,となっています。 このため,constant-expressionでないnを使って配列の宣言を行うことはできません。 ただし,標準C (ISO/IEC 98989) では,1999年版より実行時にサイズを決めることのできる配列型が許されるようになっています。 VC++でない環境でできるのは,C++環境においても標準Cの機能を使えるように拡張してあるためではないでしょうか。
お礼
ご回答有難うございます。 拡張されているということがあるんですね。人工言語なら、統一した文法を持ってほしいと思うのですが…
- Wr5
- ベストアンサー率53% (2173/4061)
>int *array = new int(N); >のことですか?そうしたらうまくいきました。 ()じゃなくて[]ですが……。 あとdelete[]での解放をお忘れ無く。 C99なら寿命でちゃんと管理されると思われますが…。
お礼
ご回答ありがとうございます メモリの開放に関して了解しました。new int()でうまく行ったのは私だけ?new int[]はJavaぽいですね。
- jack-a3
- ベストアンサー率38% (305/800)
google先生に「C++ 配列 動的確保」で検索すると山ほど出てきます。 その中の先頭数個のページを読んでみて、それでもできないでしょうか?
補足
言葉が足りなくてすみません。 mallocみたいなのを使えば、VC++でも動きましたが、質問で書いたコードを動くようにしたです。 コンパイラによっては正常に動作するので
お礼
ありがとうございます。使えないならしょうがないです。 new[]で確保って int *array = new int(N); のことですか?そうしたらうまくいきました。 ありがとうございます