0

削除された配列にアクセスして、メモリがどのように変更されたかを確認したかったのですが、非常に大きな配列を削除してからaccess violation exception. 私はcout彼らが遅いことを知っていますが、私はそれらを取り除きます。1000要素の配列に対して行うと問題ありませんが、1000000に対して行うと例外が発生します。これが変な仕事であることはわかっていますが、私の先生は頑固で、どう対処すればよいかわかりません。

編集:私は決してその記憶にアクセスしてはならないことを知っていますが、おそらく彼がそのときに見せて、私が正しくないと言うトリックがあることも知っています.

    long max = 1000000;// for 10000 i do not get any exception.
    int* t = new int[max];
    cout<<max<<endl;
    uninitialized_fill_n(t, max, 1); 
    delete[] t;
    cout<<"deleted t"<<endl;
    int x;
    cin>>x;//wait little bit
    int one = 1;
    long counter = 0;
        for(long i = 0; i < max; i++){
            cout<<i<<endl;
            if(t[i] != 1){
                cout<<t[i]<<endl;
                counter++;          
            }               
        }
4

3 に答える 3

2

「削除された」メモリの状態は定義されておらず、削除後にメモリにアクセスすることは未定義の動作です (つまり、C++ 仕様では、そのようなメモリにアクセスするときに「何でも」発生することが許可されています。 " 時折)。

削除されたメモリには絶対にアクセスしないでください。より大きな配列のケースに示されているように、メモリがプロセスで実際に使用できなくなる可能性があるため、アクセスできない場合があります。

于 2013-05-05T15:35:10.360 に答える
0

解放されたバッファへのアクセスは許可されていません

于 2013-05-05T15:34:39.453 に答える