とても初心者な質問で申し訳ありません。C++の初学者です。
以下のようなコードを書きました。
int main(int argc, const char * argv[]) { int *p; p = new int(); *p = 123; cout << *p << endl; // [1] delete p; cout << *p << endl; // [2] return 0; }
コメントの[1]のcoutでは、123
と表示されました。
しかしながら、delete p
で動的に確保したメモリを解放した後の、
コメント[2]でも123
と表示されました。
私の期待した挙動としては、コメント[2]のcoutでは、
解放された後のメモリを参照しようとしているのでエラーとなるのではと思ったのですが、そうなっていない理由はなぜなのでしょうか?
初歩的な質問で大変申し訳ありませんが、どうか教えてください。
みなさま、たいへん親切に教えてくださり、ありがとうございました!
「ちまちまと小さなメモリを解放するのは面倒くさいから、まとめて解放するよ。だから解放したはずのメモリ領域にもたまたま値が残っていることがあるよ。でも残ってるか残ってないかは保証しませんよ!」
ということなんですね!
おかげですごくスッキリしました!
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。