-1

私は 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 を使用すると、プログラムはこれに移動します。配置して、リクエストに十分な長さの未使用のバイトの長さを見つけ、その最初のメモリ値をポインターに返します。すべてが既に定義されているため、次の値に移動して読み取ることができます。

4

1 に答える 1