Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2018, 15:16   #1
Alistra
 
Регистрация: 26.12.2017
Сообщений: 6
Печаль Нарушение доступа для чтения. Не могу устранить ошибку.

Здравствуйте. Пишу функциональное меню: учет новых работников. Я уже устроила ввод данных на нового работника, сохранение в файл, и вывод всех сохраненных в файл объектов в виде таблицы. У меня класс Human, с двумя конструкторами: по умолчанию и принимающий(имя,фамилию,отчество,до лжность,оплата за час,отработанные часы).
Сейчас пытаюсь устроить изменение сохраненных данных на определенного работника. Так как они сохраняются в файл под определенным id. Я написала отдельную функцию типа void, в которую передается аргументом int value(введенный пользователем id для выбора работника из файла). Вот эта функция:

Код:
void EditDataForId(int value) 
{
  Human sympel2;//создаю объект для присваивания считываемых данных

	ifstream fin2;
	fin2.open("myFils.txt");//открываю файл

	if (!fin2.is_open()) {
		cout << "Файл не открылся!\n";
	}
	else {
		cout << "Файл открыт для редактирования!\n";

while (fin2.read((char*)&sympel2, sizeof(Human)))
	{
		if (sympel2.ReceivingId() == value) 
//если функция которая возвращает id равна введенной переменной от пользователя,выводим данные этого работника
                        {
			   sympel2.PrintHuman();//функция вывода данных
				cout << endl;
			}
       }
		
               }
	fin2.close();
}
Функция работает прекрасно до момента выхода из зоны видимости этой функции.
Проходилась в отладчике, вот что вылазит:
Вызвано исключение: нарушение доступа для чтения. _Pnext было 0x367D8D4.

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 26.02.2018 в 09:50.
Alistra вне форума Ответить с цитированием
Старый 25.02.2018, 10:44   #2
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию Помощь студентам по программированию

Сомневаюсь в том, что это кто-либо определённо поймёт. Возможно, работаете через указатель и не проверяете размер данных или этот размер не правильный.
СтудПом вне форума Ответить с цитированием
Старый 25.02.2018, 11:15   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Покажите, что такое Human
Black Fregat вне форума Ответить с цитированием
Старый 27.02.2018, 14:26   #4
Alistra
 
Регистрация: 26.12.2017
Сообщений: 6
По умолчанию

Код:
class Human {
public:
	string Name, Surname, Patronymic, Post;
	double PayHour;//оплата за час
	int Hour, id;

	Human() //конструктор по умолчанию
	{}

	Human(int id,string Name, string Surname, string Patronymic, string Post, double PayHour, int Hour) //конструктор, который принимает все данные на работника
{
		this->id = id;
		this->Name = Name;
		this->Surname = Surname;
		this->Patronymic = Patronymic;
		this->Post = Post;
		this->PayHour = PayHour;
		this->Hour = Hour;
		x = id;
	}


void Print() //вывод заголовка таблицы
{
cout << "id"<<"\t"<<"Имя"<<"\t\t"<<"Фамилия"<<"\t\t"<<"Отчество<<"\t"<<"Post"<<"\t"<<"Pay/h"<<"\t"<<"Hour"<<"\t"<<"Pay" << endl;
}

void PrintHuman() //вывод данных на работника
{
cout << id << "\t" << Name << "\t" << Surname << "\t" <<Patronymic<< "\t" <<Post<<"\t"<< PayHour << "\t" << Hour << "\t" << PayHour * Hour << endl;
}
};
Alistra вне форума Ответить с цитированием
Старый 27.02.2018, 14:28   #5
Alistra
 
Регистрация: 26.12.2017
Сообщений: 6
По умолчанию

Я устранила ошибку, тем что объект ,который создавала в функции, сделала глобальным. Но все ровно интересует, что это за ошибка, и где в коде я ее допустила.
Alistra вне форума Ответить с цитированием
Старый 27.02.2018, 14:54   #6
Alistra
 
Регистрация: 26.12.2017
Сообщений: 6
По умолчанию

Сомневаетесь, что кто-то поймет, потому что нужно было целиком код скидывать? Или у меня такой корявый код?))) Я только учусь, опыта нет, поэтому интересуют все детали. Указатели я в самой функции не использую и ему параметром не передаю.Просто внутри функции создаю объект для считывания из файла, но после того как всё успешно считывается он не может вернуться в main. Когда я реализовывала эту логику просто в main, всё работало отлично.
Alistra вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу Анастасия_18 Общие вопросы C/C++ 3 16.07.2014 09:57
ваша программа вызвала нарушение доступа (ошибку сегментации) Fatal Error Общие вопросы C/C++ 2 28.06.2012 20:00
Не могу устранить ошибку EAccessViolation k1r1ch Общие вопросы Delphi 8 06.07.2009 12:07
Нарушение доступа Perception Помощь студентам 9 11.07.2008 14:44