У меня есть структура
struct CarInfo
{
string brand;
string color;
string licensePlate;
string fullName;
};
Я хочу прочитать из бинарного файла все записи структур и вывести их на экран, потом дописать в конец файла структуру и снова вывести на экран, это всё делается через функции. после вывода на экран программа зависает и завершается: (процесс 8720) завершает работу с кодом -1073741819. Вызвано необработанное исключение: нарушение доступа для чтения. _Pnext было 0xD507DC.
Функция выглядит вот так:
void showAllRecords(string direction, fstream &file, CarInfo item)
{
vector<CarInfo> recordForOut(numberOfRecords(direction, file, item));
int i = 0; bool t = false;
int countOfRecords = numberOfRecords(direction, file, item);
file.open(direction, ios::binary | ios::in | ios::out);
while (i < recordForOut.size())
{
file.read(reinterpret_cast<char*>(&item), sizeof(item));
recordForOut[i] = item;
i++;
}
file.seekg(0);
file.close();
for (int j = 0; j < recordForOut.size(); j++)
{
cout << "\n" << j + 1 << " item\n";
cout << "brand " << recordForOut[j].brand;
cout << "\ncolor " << recordForOut[j].color;
cout << "\nfull name " << recordForOut[j].fullName;
cout << "\nlicense plate " << recordForOut[j].licensePlate << "\n\n";
}
}
Пробовал разные варианты, независимо от них всё время появляется одна и та же ошибка.
Если Вам необходимо хранить именно в бинарном виде, как уже было сказано в комментариях
объекты std::string не являются POD типами и запись их байт является неопределенным поведением
В связи с этим Вам необходимо либо воспользоваться уже существующими сериализаторами, например protobuf или boost.serrialization, или написать свой.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Проблема в приведении типов при попытке написать код для WinAPIПрограмма простенькая, для вывода таблицы умножения
Дана строка, состоящая из символов латинского алфавита, разделенных пробелами (одним или несколькими)Определить количество слов, которые...
есть char b[50] = "11 2 6" или он может быть записан char b[50] = "1 23 6"