生のポインタによって作成されたCスタイルの配列についてのアイデアを得るための短いコードを書いています。今日このメソッドを使用するのは珍しいことですが、試してみたいと思います。だからここに私のコードです:C-Style-Arrayからメモリを解放してください。
#include <iostream>
int main() {
int *ptr = new int[5];
for(unsigned int counter = 0; counter < 5; counter++) {
ptr[counter] = counter * counter;
std::cout << ptr[counter] << std::endl;
}
delete [] ptr;
std::cout << ptr[2] << std::endl; // Contains still a value
}
出力:
0
1
4
9
16
4
その非常に単純なコード、私はちょうど5「INT」の文字のメモリフィールドを作成し、いくつかの数字でこれらを埋めてきました。私は、メモリリークを避けるために使用後に配列ポインタの構造体を削除しますが、私の驚きには、第1と第2のポインタが正しく削除されています。誰もがこの現象の答えを持っていますか?
[はい、それは*未定義の動作*と呼ばれます](http://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviours-that-ac-programmer-should-know -a) – Rakete1111
別のプロセスがそれらに書き込むまで、それらの値は保持されます。 'delete'の後にそれらを読み出すことは*未定義の動作*であり、その値はまだ有効です。 –
コードにバグがあります。バグを修正すれば、謎が解消されます。はい、バグのコードは、あなたが期待することをしません。だから、バグを発見したときにバグを修正するのです。 –