2017-09-02 26 views
-2

im初心者ではC++。 実行時にサイズの異なる複数の配列を作成したい。 コンパイルして実行した以下のコードを試しました。しかし、それは私がグーグル・グーグル・グーグルと答えた直後ではないようだ。結果の大部分は、新規および削除またはベクトルまたはその他のライブラリ実装を使用して行う必要があると言います。誰でもそれが間違っていることを指摘することができますか?実行時に異なる長さのC++配列を作成する方法

void Basics::TestArray(int length){ 
     int arr[length]; 
     for(int i=0;i<length;i++){ 
      arr[i] = i; 
     } 
} 
+5

[整数の動的配列を作成する方法](https://stackoverflow.com/questions/4029870/how-to-create-a-dynamic-array-of-integers) –

+4

の代わりにvectorを使用する可能性があります。コメントを削除するための配列 –

+0

thx @JamesRootのリンクは、問題タイトルの質問状態を本当に混乱させる配列の作成に関する情報を提供しますが、私の提供するコードがなぜ機能するのかという追加の問題はありません。以下のArtemyの答えは私の混乱を解決した。 – PublicAngus

答えて

2

可変長配列(VLA)は、C99の機能です。標準のC++ではサポートされていません。いくつかのC++コンパイラはコンパイラの拡張機能としてVLAのサポートを提供していますが、私はそれを離れています。

C++で同じことを達成するための最良の方法 - STDを使用して::ベクトル

std::vector<int> arr(length); 
for(auto i=0;i<arr.size();i++){ 
     arr[i] = i; 
} 
+0

感謝@Artemy、それは私の質問を解決した – PublicAngus

0
void Basics::TestArray(int length){ 
    int *arr =new int[length]; 
    for(int i = 0; i < length; i++) { 
     arr[i] = i; 
    } 
    //do something with your array before it gets deleted 
    delete []arr; 
} 

「長さ」はその中に一定にする必要があるため、私はあなたのコードがエラーなしでコンパイル驚いていますコード。

上記は、配列へのポインタを使用して行うことができますが、 'new'キーワードを使用する場合、配列を削除する必要があります。そうしないとメモリがリークします。 (配列は関数内に作成されているため、関数を終了する前に削除してから範囲外になり、再度アクセスする方法はありません)。

動的配列このようにして、デストラクターが範囲外になったときに自動的に削除されるラッパークラスを作成する方が良いと思います。 しかし、上記のようにstd :: vectorクラスを使用することをお勧めします。

関連する問題