[602] Re:deleteとdelete[]
投稿者:もぐ
2007/02/20 02:13:25
ありがとうございました。
[601]>どちらもpの型はchar**ではないでしょうか。
そうです。すごく初歩的なミスで はずかしですけど。
[601]>ただし、p[n]を個別に解放したいとか、個別にサイズ変更(realloc)したいとかの
[601]>場合には(B)の方法は使えません。
[600]>なので、しょぼい仮想記憶 (というかスワップ機能) を持つOSだと問題が発生しえます。
わかりました。
ソースのわかりやすさでも、機能性とかバグ回避の点でも
(B)が優れているとは言えないわけですね。
[601]>ポインタ完全制覇をお持ちなら、「2.1 仮想アドレス」を参照してください。
[601]>ところで、閲覧したいメモリは仮想メモリでしょうか? 物理メモリでしょうか?
仮想アドレスの章: はい、今 読んでみました。仮想メモリと物理メモリの話ですね。
閲覧したいのは物理メモリです。仮想メモリもついでに見てみたいです。
[600]>VC++ の IDE デバッガとか gdb とか、いろいろデバッガがありますね。
[600]>わざわざ作るまでも無いような気がします。
あ~、なるほど。知りませんでした。
とりあえず、デバッガを使ってみます。
[600]>>上のプログラム(B)のときのメモリ開放は
[600]>>delete[] p[0];
[600]>>delete[] p;
[600]>正解です。
やっぱり当然ですね。
でも、うっかり次のように書いてしてしまいそうで
やっぱり(B)はあんまり良いコーディングではないですね
for(y=0;y<yM;y++)delete[] p[y];
delete[] p;
以上 参考になりました。ありがとうございました。