以下のようにstring型の二次元配列を動的確保して解放すると
プログラム終了時にBlock_Type_IS_VALIDと怒られます。
string型ってポインタでも自動的に解放してくれるのでしょうか?
string型を動的確保して解放するとエラーが出ます
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: string型を動的確保して解放するとエラーが出ます
delete []していなからだと思います。
「C++編(言語解説) 第12章 new/delete」
http://www.geocities.jp/ky_webid/cpp/language/012.html
「C++編(言語解説) 第12章 new/delete」
http://www.geocities.jp/ky_webid/cpp/language/012.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: string型を動的確保して解放するとエラーが出ます
softyaさんありがとうございます。
かなり基本的な事でした。解決といたします。
ポインタ配列を解放するのは[]がいるんですね、
#他にもint型の多次元配列を似たように確保→解放していたのですが
#エラーを吐くのはstring型だけでした。int型は何事もなかったかのように終了しちゃうんですね。。。
かなり基本的な事でした。解決といたします。
ポインタ配列を解放するのは[]がいるんですね、
#他にもint型の多次元配列を似たように確保→解放していたのですが
#エラーを吐くのはstring型だけでした。int型は何事もなかったかのように終了しちゃうんですね。。。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: string型を動的確保して解放するとエラーが出ます
それはデストラクタの問題です。taketoshi さんが書きました:softyaさんありがとうございます。
かなり基本的な事でした。解決といたします。
ポインタ配列を解放するのは[]がいるんですね、
#他にもint型の多次元配列を似たように確保→解放していたのですが
#エラーを吐くのはstring型だけでした。int型は何事もなかったかのように終了しちゃうんですね。。。
intは基本型なのでデストラクタが働く必要がないからでstringはクラスですのでデストラクタが動作しないとマズイですから。
【追記】 new/deleteではなくSTLのvectorでvector<string>として管理していただいたほうがメモリリークの問題を回避できるのでお勧めです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: string型を動的確保して解放するとエラーが出ます
重ねてありがとうございます。デストラクタの問題だったんですね。
STLのvector<string>も使ったことがあるので、なんとなく理解できます。
必要に応じて使っていきます。
STLのvector<string>も使ったことがあるので、なんとなく理解できます。
必要に応じて使っていきます。