実現したいこと
クラス初期化時に引数で指定したサイズの静的配列を0で初期化したい。
とある練習問題に取り組む中で今後のために試行錯誤していたら躓いたのでアドバイスください。
よろしくお願いします。
前提
静的配列を使わなければならない。(とある練習問題の制限)
練習問題の制限ではないですが今後のために出来ることなら静的配列のサイズを指定出来るようにしたい。
vectorなどを使えば可能なことは理解しているつもりです。
発生している問題
0で初期化したつもりが初期化されずに不特定の数値のままになっている。
試したこと
質問用に必要と思われる部分だけ抜粋して下記コードを作ってみました。
比較用に問題となっている出力と期待する出力の2パターンを作ってみました。
コード
C++
1#include <bits/stdc++.h> 2 3class Test { 4public: 5 std::size_t MAX; 6 long long int array[]; 7 8public: 9 Test(std::size_t n) { initialize(n); } 10 11public: 12 void initialize(std::size_t n) { 13 MAX = n; 14 array[MAX] = {};//←ここで0で初期化してるつもりがされていない? 15 } 16}; 17 18int main() { 19 20 std::size_t array_size = 10; 21 22 // class Testで作った配列(0で初期化されていない出力となる) 23 Test test(array_size); 24 for (int i = 0; i < array_size; i++) { 25 std::cout << test.array[i] << " "; 26 } 27 std::cout << std::endl; 28 29 //直接作った配列(0で初期化された期待通りの出力となる) 30 long long int sample_array[array_size] = {}; 31 for (int i = 0; i < array_size; i++) { 32 std::cout << sample_array[i] << " "; 33 } 34 std::cout << std::endl; 35 36 getchar(); 37 return 0; 38} 39 40// 出力例 41// 15536856 140713998658294 0 0 4199840 24 0 0 16 4199721 42// 0 0 0 0 0 0 0 0 0 0
補足情報(FW/ツールのバージョンなど)
Win10
VSC1.47.3
C++14
gcc version 8.2.0 (Rev3, Built by MSYS2 project)
そもそもC++ではVLAは使えません(gccで-pedantic-errorsを付けるとコンパイルエラー)。Cでは使えるため、コンパイラによってはC++でも可能ですが、その場合の動作はコンパイラの拡張仕様に関するドキュメントを読まないと、なんとも言えないです。
一読をお勧めします→https://www.it-swarm.dev/ja/c%2B%2B/c-%E3%81%AE%E9%9D%99%E7%9A%84%E9%85%8D%E5%88%97%E3%81%A8%E5%8B%95%E7%9A%84%E9%85%8D%E5%88%97/969944921/
raccyさん、cateyeさん、ありがとうございます。
VLAという単語を知らなかったので調べたら可変長配列とのことで使えないということを知れて助かりました。
リンク先の内容は難解ですが目を通しておきたいと思います。
回答2件
あなたの回答
tips
プレビュー