ページ 1 / 1
string型を動的確保して解放するとエラーが出ます
Posted: 2013年3月03日(日) 15:54
by taketoshi
以下のようにstring型の二次元配列を動的確保して解放すると
プログラム終了時にBlock_Type_IS_VALIDと怒られます。
string型ってポインタでも自動的に解放してくれるのでしょうか?
コード:
//変数定義
static string **MoveDirection;
コード:
//確保と解放処理
int size = s_map.width;
int size2 = s_map.height;
//目的地に行くまでの経路を保存するstring型の二次元配列を用意する
MoveDirection = new string *[size];
for(i = 0;i < size;++i){
MoveDirection[i] = new string[size2];
}
//キャラクタの経路情報を記録した配列を解放
for(i = 0;i < size;++i){
delete MoveDirection[i];
}
delete MoveDirection;
Re: string型を動的確保して解放するとエラーが出ます
Posted: 2013年3月03日(日) 16:09
by softya(ソフト屋)
Re: string型を動的確保して解放するとエラーが出ます
Posted: 2013年3月03日(日) 23:15
by taketoshi
softyaさんありがとうございます。
かなり基本的な事でした。解決といたします。
ポインタ配列を解放するのは[]がいるんですね、
#他にもint型の多次元配列を似たように確保→解放していたのですが
#エラーを吐くのはstring型だけでした。int型は何事もなかったかのように終了しちゃうんですね。。。
Re: string型を動的確保して解放するとエラーが出ます
Posted: 2013年3月03日(日) 23:24
by softya(ソフト屋)
taketoshi さんが書きました:softyaさんありがとうございます。
かなり基本的な事でした。解決といたします。
ポインタ配列を解放するのは[]がいるんですね、
#他にもint型の多次元配列を似たように確保→解放していたのですが
#エラーを吐くのはstring型だけでした。int型は何事もなかったかのように終了しちゃうんですね。。。
それはデストラクタの問題です。
intは基本型なのでデストラクタが働く必要がないからでstringはクラスですのでデストラクタが動作しないとマズイですから。
【追記】 new/deleteではなくSTLのvectorでvector<string>として管理していただいたほうがメモリリークの問題を回避できるのでお勧めです。
Re: string型を動的確保して解放するとエラーが出ます
Posted: 2013年3月04日(月) 22:52
by taketoshi
重ねてありがとうございます。デストラクタの問題だったんですね。
STLのvector<string>も使ったことがあるので、なんとなく理解できます。
必要に応じて使っていきます。