at the end of my 2d shooter i store their info to a binary file, then at the beginning of the game i ask if they would like to see it which will read it back in and save it to a text file for them, it was working fine for the bast couple of days. today i got an error stating i had a heap corruption and when i display whet is in the txt file for them i am noticing that it is reading in garbage... what could cause this in the code below.
using namespace System::Windows::Forms;
auto btn = MessageBox::Show("Would you like to see past games info?", "Game Info",
MessageBoxButtons::YesNo, MessageBoxIcon::Question);
if (DialogResult::Yes == btn){
unsigned short display;
cout << "How would you like to see it displayed \n\n";
cout << "1).Name, ascending\n2).Name, descending\n3).Time, descending\
\n4).Score, descending\n5).Save to .txt\n6).Play game!\n\nChoice: ___\b\b";
cin >> display;
system("cls");
ifstream input;
input.open("gameinfo.bin", ios_base::binary);
input.seekg(0, ios_base::end);
auto filesize = static_cast<unsigned int>(input.tellg());
auto records = filesize / sizeof GameInfo;
vector<GameInfo> all(records);
input.seekg(0);
input.read((char *)all.data(), filesize);
input.close();
ostream_iterator<GameInfo> oi(cout, "\n");
string txtfile;
ofstream out;
ostream_iterator<GameInfo> iout(out, "\n");
switch (display)
{
case 1:
Console::ForegroundColor = ConsoleColor::DarkCyan;
cout << "Name";
Console::SetCursorPosition(20, Console::CursorTop);
cout << "Score";
Console::SetCursorPosition(30, Console::CursorTop);
cout << "Time" << '\n';
cout << "_____";
Console::SetCursorPosition(20, Console::CursorTop);
cout << "______";
Console::SetCursorPosition(30, Console::CursorTop);
cout << "_____" << '\n';
sort(all.begin(), all.end(), [](GameInfo const &a, GameInfo const &B)/> -> bool {
return string(a.name) < b.name;
});
copy(all.begin(), all.end(), oi);
for_each(all.begin(), all.end(), [](GameInfo const &s){});
cout << '\n';
break;
case 2:
Console::ForegroundColor = ConsoleColor::DarkCyan;
cout << "Name";
Console::SetCursorPosition(20, Console::CursorTop);
cout << "Score";
Console::SetCursorPosition(30, Console::CursorTop);
cout << "Time" << '\n';
cout << "_____";
Console::SetCursorPosition(20, Console::CursorTop);
cout << "______";
Console::SetCursorPosition(30, Console::CursorTop);
cout << "_____" << '\n';
sort(all.begin(), all.end(), [](GameInfo const &a, GameInfo const &B)/> -> bool {
return string(a.name) > b.name;
});
copy(all.begin(), all.end(), oi);
for_each(all.begin(), all.end(), [](GameInfo const &s){});
cout << '\n';
break;
case 3:
Console::ForegroundColor = ConsoleColor::DarkCyan;
cout << "Name";
Console::SetCursorPosition(20, Console::CursorTop);
cout << "Score";
Console::SetCursorPosition(30, Console::CursorTop);
cout << "Time" << '\n';
cout << "_____";
Console::SetCursorPosition(20, Console::CursorTop);
cout << "______";
Console::SetCursorPosition(30, Console::CursorTop);
cout << "_____" << '\n';
sort(all.begin(), all.end(), [](GameInfo const &a, GameInfo const &B)/> -> bool {
return (a.time) > b.time;
});
copy(all.begin(), all.end(), oi);
for_each(all.begin(), all.end(), [](GameInfo const &s){});
cout << '\n';
break;
case 4:
Console::ForegroundColor = ConsoleColor::DarkCyan;
cout << "Name";
Console::SetCursorPosition(20, Console::CursorTop);
cout << "Score";
Console::SetCursorPosition(30, Console::CursorTop);
cout << "Time" << '\n';
cout << "_____";
Console::SetCursorPosition(20, Console::CursorTop);
cout << "______";
Console::SetCursorPosition(30, Console::CursorTop);
cout << "_____" << '\n';
sort(all.begin(), all.end(), [](GameInfo const &a, GameInfo const &B)/> -> bool {
return (a.score) > b.score;
});
copy(all.begin(), all.end(), oi);
for_each(all.begin(), all.end(), [](GameInfo const &s){});
cout << '\n';
break;
case 5:
play = true;
break;
default:
break;
}
system("pause");
system("cls");
cout << "Please enter the name of a text file you would like it saved to\n";
cout << "____________\b\b\b\b\b\b\b\b\b\b\b\b";
cin >> txtfile;
if (txtfile.size() == 0)
{
txtfile = "Highscores";
}
txtfile += ".txt";
out.open(txtfile);
copy(all.begin(), all.end(), iout);
out.close();
fin.open(txtfile);
system("cls");
cout << "Info save to txt file:\n\n";
copy(all.begin(), all.end(), oi);
for_each(all.begin(), all.end(),[](GameInfo const &s){});
fin.close();
system("pause");
}