- 締切済み
多次元配列のメモリ解放
多次元配列のメモリ解放についてです。 以下のような方法で多次元配列を確保した場合に、 --- char** ppMain; ppMain = new char*[3]; for (int i = 0; i < 3; i++){ ppMain[i] = new char[20]; } --- メモリ解放する場合、 --- for (int i = 0; i < 3; i++){ delete [] ppMain[i]; ppMain[i] = NULL; } delete [] ppMain; ppMain = NULL; --- で良いでしょうか? おそらく、new/deleteの回数が同じであれば問題ないと思うのですが。 少し混乱してしまって、 delete [] ppMain[i]; によって new char*[3]で確保したところも解放されており delete [] ppMain; が必要なく危険な領域まで解放しようとしているということはないでしょうか? ご専門、お詳しいかたコメント宜しくお願いします。
補足
ご回答ありがとうございます。 "中途半端な割付け"の意味をいろいろ調べていて、 連絡遅れてしまいました。 調べても全く違いが分からなかったのですが、 (1)の場合の中途半端な割付けというところをもし良ければ 少しコメントいただけないでしょうか? ■(1) for (int i = 0; i < 3; i++){ ppMain[i] = new char[20]; } ■(2) char (*pMain)[20] = new char[3][20]; jactaさんの回答では、 (2)の場合は、割付けに失敗すればNULLが返って来るので問題ない。 (1)の場合には割付けに失敗してもNULLが返ってこない(適当なアドレスが返ってきてしまうので例外チェックも必須)ということだと思いますが、 その違いは何でしょうか? (1)と(2)の違いというと1次元配列、2次元配列の違いしか私には分からないのですが、 その違いでメモリ割り当て方法が大きく変わってくるのでしょうか?