セーブとロードについて
Posted: 2011年7月18日(月) 12:22
初めまして
主にC++主体でRPGを製作しようとしています
先に書いておくと、以下のプログラムを見てもらえればわかるとは思いますが、C言語及びC++の知識は俄かもいいところです
それで、今はセーブとロードの機能を実装しようとして、fstreamを使って試しにキャラクターの持つ変数をセーブ&ロードしてみようとしたのですが、セーブ時には何のエラーも起きないのに、その後でそのセーブデータをロードすると、プログラム終了時に下記のエラーが出ます(一部こちらで勝手に不要と判断した部分は省略しています)
Debug Assertion Failed!
Program:...ments...(略)....exe
File:f:¥dd¥vctools...(略)...¥dbgdel.cpp
Line:52
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
For information on how your program can cause an assertion failure, see the Visul C++ documentation on asserts.
以上がエラー内容です
調べた結果、どうやらメモリ領域の確保と解放に関連するエラーらしいのですが自分にはどこが原因なのかが分かりません
ですので、以下、(自分の憶測で問題はここら辺に判断した)プログラムを記載します
取り敢えずこれだけ書いてみましたが、他にも書くべきことがあったらそれも教えてください
それと、こちらの環境はVC2010Expressです
質問内容は、
1、上記エラーの原因及び解決方法
2、そもそもクラスの持つ変数の入出力はこのやり方でいいのか
です
よろしくお願いします
主にC++主体でRPGを製作しようとしています
先に書いておくと、以下のプログラムを見てもらえればわかるとは思いますが、C言語及びC++の知識は俄かもいいところです
それで、今はセーブとロードの機能を実装しようとして、fstreamを使って試しにキャラクターの持つ変数をセーブ&ロードしてみようとしたのですが、セーブ時には何のエラーも起きないのに、その後でそのセーブデータをロードすると、プログラム終了時に下記のエラーが出ます(一部こちらで勝手に不要と判断した部分は省略しています)
Debug Assertion Failed!
Program:...ments...(略)....exe
File:f:¥dd¥vctools...(略)...¥dbgdel.cpp
Line:52
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
For information on how your program can cause an assertion failure, see the Visul C++ documentation on asserts.
以上がエラー内容です
調べた結果、どうやらメモリ領域の確保と解放に関連するエラーらしいのですが自分にはどこが原因なのかが分かりません
ですので、以下、(自分の憶測で問題はここら辺に判断した)プログラムを記載します
//キャラクタークラスの持つ変数
class Character
{
string name;
int chara_x;//キャラのx座標
int chara_y;//キャラのy座標
int chara_m_x[128];//キャラのマップ上におけるx座標
int chara_m_y[128];//キャラのマップ上におけるy座標
int syoku; //職業No.
string type;//職業名
int syokulv;//職業レベル
int ss; //筋力職ボーナス
int vs; //体力職ボーナス
int ds; //命中職ボーナス
int as; //敏捷職ボーナス
int ws; //知能職ボーナス
int ls; //幸運職ボーナス
int hs; //HP職ボーナス
int ms; //MP職ボーナス
int syokuexp; //職業経験値
int bonus; //能力値ボーナス
int sb; //筋力ボーナス
int vb; //体力ボーナス
int db; //命中ボーナス
int ab; //敏捷ボーナス
int wb; //知能ボーナス
int lb; //幸運ボーナス
int hb; //HPボーナス
int mb; //MPボーナス
int lv; //レベル
int str; //筋力
int vit; //体力
int dex; //命中
int agi; //敏捷
int wis; //知能
int luc; //幸運
int hp; //HP
int mp; //MP
int weight; //重さ
int exp; //経験値
//Character::sakusei()に使う変数
int sakusei_flag;
int m_x;
int m_xs[10];
int m_y;
int m_n;
int m_i;
int m_tf;
string temp;
string temps;
char c[11];
public:
//以下諸々の関数
}
//セーブデータクラスのセーブ関数(セーブデータクラスは他には特に変数も関数も持っていないので省略)
void Savedata::save()
{
ofstream ofs;
ofs.open("SAVEDATA.txt",ios_base::out | ios_base::trunc | ios_base::binary);
ofs.write((char*)pchara,sizeof(Character)); //Character *pchara = &chara(=クラスキャラクターのオブジェクトのポインタ)
ofs.close();
}
//ロードデータクラスのロード関数(ロードデータクラスは他には特に変数も関数も持っていないので省略)
void Loaddata::load()
{
ifstream ifs;
ifs.open("SAVEDATA.txt",ios_base::out | ios_base::app | ios_base::binary);
ifs.read((char*)pchara,sizeof(Character));
ifs.close();
}
それと、こちらの環境はVC2010Expressです
質問内容は、
1、上記エラーの原因及び解決方法
2、そもそもクラスの持つ変数の入出力はこのやり方でいいのか
です
よろしくお願いします