我正在开发一个处理创建两个字符串、用户名和密码的项目。这两个元素构成了一个 Account 对象。大体上,有一个在 10 处初始化的帐户数组。我有一个 Save & Quit 选项,它将用户名保存在同一文件中的一行中,并将密码保存在下一行中。一对线表示另一个帐户。
我的问题是,您如何正确保存帐户数组中的数据,然后从以前的帐户数组中加载数据?
std::bad_alloc memory
每次尝试该loadAccounts()
功能时都会出错。我有几种不同的方法,但无济于事。
到目前为止,我已经想出了这个来保存数组(到目前为止应该可以工作):
void saveAccounts(Account accs [], int numIndexes)
{
std::ofstream savefile("savedata.sav", std::ofstream::binary); // By re-initializing the file, the old contents are overwritten.
for (int i = 0; i < numIndexes; i++)
{
savefile << accs[i].getUsername() << endl;
savefile << accs[i].getPassword() << endl;
}
savefile.close();
}
至于我的加载功能,我有:
Account* loadAccounts() // Load the data from the file to later print to make sure it works correctly.
{
cout << "LOADING ACCOUNTS!" << endl;
std::ifstream loadfile("savedata.sav", std::ifstream::binary);
Account * acc_arr; // The "Array" to be returned.
Account tmp_arr [10]; // The array to help the returned "Array."
acc_arr = tmp_arr; // Allowing the "Array" to be used and returned because of the actual array.
if (loadfile.is_open())
{
int i = 0;
while (loadfile.good())
{
cout << "Loadfile is good and creating Account " << i+1 << "." << endl; // For my own benefit to make sure the data being read is good and actually entering the loop.
std::string user;
std::getline(loadfile, user);
std::string pass;
std::getline(loadfile, pass);
Account tmpAcc(user, pass);
tmp_arr[i] = tmpAcc;
++i;
}
Account endAcc = Account(); // The default constructor sets Username to "NULL."
tmp_arr[i] = endAcc;
}
loadfile.close();
cout << "ACCOUNTS LOADED SUCCESSFUL!" << endl;
return acc_arr;
}
我已经收集到我可以通过使用指针和实际数组来返回一个数组来做同样的事情,因为实际上不能返回一个数组。
我尝试在这里使用返回的数组,我试图将加载的数组“复制”到实际打印的数组中。稍后,我将打印数组(acc_arr)以确保加载的数组已成功加载:
else if (selection == 'l' || selection == 'L')
{
Account * tmp_acc_arr = new Account [10];
tmp_acc_arr = loadAccounts();
_getch();
for (size_t i = 0; i < size_t(10); i++)
{
if (tmp_acc_arr[i].getUsername() == "NULL")
{
break;
}
acc_arr[i] = tmp_acc_arr[i];
cout << "Added Account " << i << " succesfully." << endl;
}
}
该错误是由最后一段代码引起的。我已经检查以确保使用正确复制的数据
编辑:尴尬...通过使用 if 语句来确保其中的数据在tmp_acc_arr
返回并在主中初始化后实际存储了数据。