@YungJabo

Нужно вывести данные из двоичного файла. Все выводит в консоль, но после завершения метода (именно после него) вылетает ошибка. Где она?

#include <iostream>
#include <fstream>
#include <string>
#include <istream>

using namespace std;

struct MyStruct
{
	string num;
	string name;
	string IP;
	int license;
};

void create_bin_file(ifstream &ft, ofstream &fb)
{
	MyStruct x;
	while (!ft.eof())
	{
		getline(ft, x.num);
		getline(ft, x.name);
		getline(ft, x.IP);
		ft >> x.license;
		ft.get();
		fb.write((char *)&x, sizeof(MyStruct));
		fb.clear();
	}
	ft.close();
	fb.close();
}

void out_bin(ifstream &ft) {
	MyStruct x;
	ft.read((char*)&x, sizeof(MyStruct));
	while (!ft.eof()) {
		cout << x.num << endl;
		cout << x.name << endl;
		cout << x.IP << endl;
		cout << x.license << endl;
		ft.read((char*)&x, sizeof(MyStruct));
	}
	ft.close();
}

int main() {
	/*ifstream f;
	f.open("C:\\Siaod\\2.txt");
	ofstream b;
	b.open("C:\\Siaod\\2(bin).txt");
	create_bin_file(f, b);*/
	ifstream c;
	c.open("C:\\Siaod\\2(bin).txt");
	out_bin(c);
}


Он выводит все верно, но при выходе из метода появляется ошибка *_Pnext != nullptr; *_Pnext = (*_Pnext)->_Mynextiter) из xutility
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Скорее всего MyStruct содержит указатели. Может там std::string тип поля, а там внутри указатель на данные.

Читая такую структуру из файла вы получаете в указателях адрес, который был правильный, когда вы этот файл записывали. В другой вообще программе. Сейчас этот указатель указывает куда-то не туда. При уничтожении структуры вызывается деструктор, который пытается эту не вашу память освободить и программа падает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽