これは私をしばらく困惑させています。これは、静的および動的メモリ割り当ての違いを私が理解していないという心臓部に向かいます。次の配列は通常の静的配列です。つまり、コンパイル時にメモリが割り当てられているはずです。それでも、ユーザが実行時に配列サイズを入力するように設定しました。何new
またはdelete
事業者がこのプログラムに存在しないことを配列は静的ですが、配列サイズは実行時まで認識されません。これはどのように可能ですか?
#include <iostream>
using namespace std;
int main() {
cout << "how many elements should the array hold? ";
int arraySize;
cin >> arraySize;
int arr[arraySize];
for (int i = 0; i < arraySize; ++i)
arr[i] = i * 2;
return 0;
}
注意。私の学校のUNIXサーバ(GCC 4.4.5)だけでなく、Xcode 4.2(デフォルトのClangコンパイラ)でも正常に動作します。コンパイル時に配列が作成されたときに、どのくらいの量のメモリを割り当てようとしますか?これは私のコンパイラ、他のメモリを壊す可能性のある危険なコード、またはこの正当なものですか?
:警告が生成されます
-pedantic
でコンパイルするgccのために、。 –
'g ++ -Wall -Wextra -pedantic -std = C++ 98'のコンパイルを試してください –