string型を動的確保して解放するとエラーが出ます

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
taketoshi
記事: 222
登録日時: 13年前
住所: 日本国

string型を動的確保して解放するとエラーが出ます

#1

投稿記事 by taketoshi » 11年前

以下のように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;


アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: string型を動的確保して解放するとエラーが出ます

#2

投稿記事 by softya(ソフト屋) » 11年前

delete []していなからだと思います。
「C++編(言語解説) 第12章 new/delete」
http://www.geocities.jp/ky_webid/cpp/language/012.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

taketoshi
記事: 222
登録日時: 13年前
住所: 日本国

Re: string型を動的確保して解放するとエラーが出ます

#3

投稿記事 by taketoshi » 11年前

softyaさんありがとうございます。

かなり基本的な事でした。解決といたします。
ポインタ配列を解放するのは[]がいるんですね、

#他にもint型の多次元配列を似たように確保→解放していたのですが
#エラーを吐くのはstring型だけでした。int型は何事もなかったかのように終了しちゃうんですね。。。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: string型を動的確保して解放するとエラーが出ます

#4

投稿記事 by softya(ソフト屋) » 11年前

taketoshi さんが書きました:softyaさんありがとうございます。

かなり基本的な事でした。解決といたします。
ポインタ配列を解放するのは[]がいるんですね、

#他にもint型の多次元配列を似たように確保→解放していたのですが
#エラーを吐くのはstring型だけでした。int型は何事もなかったかのように終了しちゃうんですね。。。
それはデストラクタの問題です。
intは基本型なのでデストラクタが働く必要がないからでstringはクラスですのでデストラクタが動作しないとマズイですから。

【追記】 new/deleteではなくSTLのvectorでvector<string>として管理していただいたほうがメモリリークの問題を回避できるのでお勧めです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

taketoshi
記事: 222
登録日時: 13年前
住所: 日本国

Re: string型を動的確保して解放するとエラーが出ます

#5

投稿記事 by taketoshi » 11年前

重ねてありがとうございます。デストラクタの問題だったんですね。

STLのvector<string>も使ったことがあるので、なんとなく理解できます。
必要に応じて使っていきます。

閉鎖

“C言語何でも質問掲示板” へ戻る