9
int main()
{
    int arraySize;
    int arrayMain[arraySize-1];
    cout << "\n\nEnter Total Number of Elements in Array.\n\n";
    cin >> arraySize;
    arrayMain[arraySize-1]={0};
    cout <<"\n\n" <<arrayMain;
    return 0;
}

上記のコードをコンパイルすると、コンパイラがフリーズします。動的配列を0に設定する方法について混乱していますか?

4

3 に答える 3

19

あなたは:を使用しstd::vectorます

std::vector<int> vec(arraySize-1);

arraySize1)初期化されておらず、2)C ++で可変長配列を使用できないため、コードは無効です。したがって、ベクトルを使用するか、メモリを動的に割り当てます(これはstd::vector内部で行われます)。

int* arrayMain = new int[arraySize-1] ();

最後にあることに注意してください()。これは要素の値を初期化するために使用されるため、配列の要素は0に設定されます。

于 2013-02-19T11:02:24.233 に答える
5

動的配列を使用する必要がある場合は、値の初期化を使用できます (std::vector<int>推奨される解決策ですが)。

int* arrayMain = new int[arraySize - 1]();

入力操作の結果をチェックして、変数に正しい値が割り当てられていることを確認します。

if (cin >> arraySize && arraySize > 1) // > 1 to allocate an array with at least
{                                      // one element (unsure why the '-1').
    int* arrayMain = new int[arraySize - 1]();

    // Delete 'arrayMain' when no longer required.
    delete[] arrayMain;
}

の使用に注意してくださいcout:

cout <<"\n\n" <<arrayMain;

arrayMain個々の要素ではなく、配列のアドレスを出力します。各個人を印刷するには、各要素に順番にインデックスを付ける必要があります。

for (int i = 0; i < arraySize - 1; i++) std::cout << arrayMain[i] << '\n';
于 2013-02-19T11:04:47.360 に答える