データをセーブした後、起動しなおしてデータをロードするとプログラムが終了してしまいます。
そして、ブレークポイントを設定してデバッグをすると
Game.exe の 0x5624ad7a (msvcp100d.dll) で初回の例外が発生しました: 0xC0000005: 場所 0x0058856c を読み込み中にアクセス違反が発生しました。
Game.exe の 0x5624ad7a (msvcp100d.dll) でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x0058856c を読み込み中にアクセス違反が発生しました。
と出てきてどうすればいいか分かりません。
アドバイスよろしくお願いします<(_ _)>
以下メイン関数・セーブ関数・ロード関数・クラス設定
typedef struct{
string name;
int maxhp;
int hp;
int atk;
int def;
int exp;
int nextexp;
double job[3];
}save_data_t;
void savedata_load( chara& mych );
void savedata_save( chara mych );
void job_sel( chara& mych );
void battle( chara& mych );
void battle_loop( chara& mych, chara& enemy );
void enemy_select( chara& enemy );
int damage_Set( int, int );
int main()
{
int fl = 0;
int a = 0;
chara mych;
string name;
cout << "***RPG風ゲームを開始します***\n";
cout << "セーブデータをロードしますか?\n[1…はい/それ以外…いいえ]:";
cin >> a;
if( a != 1 ){
cout << "名前を入力してください。\n";
cin >> name;
mych.SetNAME( name );
job_sel( mych );
}
else
{
savedata_load( mych );
}
battle( mych );
cout << "今回のキャラクターをセーブしますか?[1…はい/それ以外…いいえ]:";
cin >> a;
if( a == 1 )
savedata_save( mych );
}
//セーブしたデータをロードする関数
void savedata_load( chara& my )
{
errno_t error;
FILE *fp;
save_data_t save_data;
error = fopen_s( &fp, "セーブデータ.dat", "rb" );
if( error != 0 )
{
return ;
}
else{
//ファイルからデータを読み込む
fread( &save_data, sizeof(save_data), 1, fp );
fclose( fp );//解放
my.SetNAME( save_data.name );
my.SetMAXHP( save_data.maxhp );
my.SetHP( save_data.hp );
my.SetATK( save_data.atk );
my.SetDEF( save_data.def );
my.SetEXP( save_data.exp );
my.SetNEXTEXP( save_data.nextexp );
my.SetJOB( save_data.job );
cout << " 名前:" << my.GetNAME() << "\n";
cout << " HP:" << my.GetHP() << " / " << my.GetMAXHP() << "\n";
cout << "攻撃力:" << my.GetATK() << "\n";
cout << "防御力:" << my.GetDEF() << "\n";
cout << "経験値:" << my.GetEXP() << " / " << my.GetNEXTEXP() << "\n";
cout << "ロードしました!\n\n";
}
}
//データをセーブする関数
void savedata_save( chara my )
{
errno_t error;
FILE *fp;
save_data_t save_data;
error = fopen_s( &fp, "セーブデータ.dat", "wb" );
save_data.name = my.GetNAME();
save_data.maxhp = my.GetMAXHP();
save_data.hp = my.GetHP();
save_data.atk = my.GetATK();
save_data.def = my.GetDEF();
save_data.exp = my.GetEXP();
save_data.nextexp = my.GetNEXTEXP();
for( int i = 0; i < 3 ; i++ )
save_data.job[i] = my.GetJob( i );
if( error != 0 ){
cout << "ファイルエラー\n";
return ;
}
else{
fwrite( &save_data, sizeof(save_data), 1, fp );
fclose( fp );
cout << "セーブが完了しました\n\n";
}
}
/*-------以下略--------*/