私は c++ で動的メモリを学習して理解しようとしています。自宅のコンピューターにいないため、オンライン コンパイラ (gcc 4.1.8) を使用していますが、興味深いことが発生しています。
最初のプログラムは 1 を出力し、エラーをスローします。
#include <iostream>
int main() {
int i[1];
i[0] = 1;
i[1] = 2;
std::cout<<i[0]<<endl;
std::cout<<i[1]<<endl;
return 0;
}
2 番目のプログラムは、1 と 2 を出力してから、0 を出力したままにします。
#include <iostream>
int main() {
int* i = new int[1];
i[0] = 1;
i[1] = 2;
std::cout<<i[0]<<endl;
std::cout<<i[1]<<endl;
std::cout<<i[2]<<endl;
return 0;
}
これが発生する理由についての私の推測では、動的メモリは、プログラムの開始時に既にゼロにクリアされているスタック (またはそれが保持されている場所) 内の事前定義されたスペースであるため、演算子 new を使用すると、プログラムはこれに移動します。配置して、リクエストに十分な長さの未使用のバイトの長さを見つけ、その最初のメモリ値をポインターに返します。すべてが既に定義されているため、次の値に移動して読み取ることができます。