It's not weird, it's common of bugs relating to uninitialized memory, or memory corruption -- the debug build includes extra checks to try and make bad code crash, so that you realize that you've got some kind of corruption going on.
Where/what is [font="Lucida Console"]_monster[/font]?
Is _monster really an object of class/struct GameMonster? And what type are Damage, Hp and Name members of _monster object?
Are there some other global variables with non-trivial constructor or destructor in your program?
std::string is non-POD, and since your classes contain it, your classes are non-POD. This means that you can't just copy the bits that make it up to a file and read it back. You need to do actual serialization.
The links says nothing about how to fix the problem so Ill ask again
should I use fixed char arrays instead or is there an actual way of reading std::strings of variable size using ifstream
<div><br></div><div><br></div><div>edit: I just tried using very long strings just to test what happened if I varied each of the monsters actual byte size but it still working properly (without considering the crash at the end of program)</div>