または他の代替手段を使用することになっていることは知っていますstd::vector
が、ポインターで理解できないことがあります。
ポインター配列を作成する場合:
int* a = new int[100];
のスペースを割り当てる必要100 * sizeof(int)
がありますね。
必要がなくなったら、次のようにします。
delete [] a;
1.
これは間違っています:
delete a;
しかし、私が実際にこれを行うと(娯楽プログラムで偶然)、実行時エラー(以下のパート3とは異なります)はトリガーされないようで、プログラムは正常に実行されます(メモリリークの可能性にもかかわらず)。なんで?そして、実際に配列の最初の要素を削除 (解放) しますか?
2.
StackOverflow に関する質問によると、delete[]
削除する必要がある配列のサイズを知っています。
しかし、間違ったものを削除するとどうなりますか? (実行時エラーが発生します... codepad.org で表示され、VS2010 でmemory clobbered before allocated block
何かが表示Debug Assertion Failed
されます。) 要素 1 から 99 を削除 (解放) しないのはなぜですか?
delete [] &a[1]; // or
delete [] (a + 1);
3.
次のコードも示していますmemory clobbered before allocated block
。しかし、要素 99 を削除 (解放) しないのはなぜでしょうか? なぜエラーが発生するのですがdelete a
、パート 1 と同じようにエラーが発生しないのはなぜですか?
delete &a[99]; //or
delete (a + 99);
C++ 標準は実際に上記のことに対して何が起こるかを述べていますか?