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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2011, 14:37   #1
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию нарушение прав доступа при чтении

Я сделал набросок 3х классов, и при первом же запуске получил ошибку

"Необработанное исключение в "0x62d959da (msvcr100d.dll)" в "классы для курсача.exe": 0xC0000005: Нарушение прав доступа при чтении "0xccccccc0"."

покопался в нете и там нашём лотько тот вариант, что компилятор может пытаться использовать какой-то NULL поинтер. Но ошибка вылетает раньше, чем запускается конструктор (когда я пытаюсь войти в конструктор в дебаге)

ошибка возникоет в main в обоих строках строках

Код:
filereader r;
filewriter w;
код классов
Код:
struct bitfield
	{
		unsigned i1:1;
		unsigned i2:1;
		unsigned i3:1;
		unsigned i4:1;
		unsigned i5:1;
		unsigned i6:1;
		unsigned i7:1;
		unsigned i8:1;
	};
/*******************************************************************************************/
/*******************************************************************************************/
/*******************************************************************************************/
/*******************************************************************************************/
class basefileoperator		//базовая обработка файла
{
protected:
	char *filename;
	fstream file;
	bitfield field;
public:
	basefileoperator();
	basefileoperator(char *nam);
	virtual bool setfilename(char* nam);
	virtual bool openfile()=0;
	virtual void nuller();
	virtual ~basefileoperator();
};

basefileoperator::basefileoperator()	//конструктор по умолчанию
{
	nuller();
}

basefileoperator::basefileoperator(char* nam)	//конструктор с параметрами
{
	nuller();
	setfilename(nam);
}

basefileoperator::~basefileoperator()				//деструктор
{
	nuller();
}

void basefileoperator::nuller()		//обнуление объекта
{
	if(filename) delete [] filename;
	filename=NULL;
	field.i1=field.i2=field.i3=field.i4=field.i5=field.i6=field.i7=field.i8=0;
	if(file.is_open()) 
	{
		file.flush();
		file.close();
	}
}

bool basefileoperator::setfilename(char* nam)		//устанвка имени
{
		if(!nam) return false;
		filename=new char [sizeof(nam+1)];
		strcpy(filename,nam);
		filename[sizeof(nam)]='\0';
		return true;
}
/*********************************************************************************************/
/*********************************************************************************************/
/*********************************************************************************************/
/*******************************************************************************************/
class filereader:public basefileoperator			//класс чтения файла
{
protected:
	using basefileoperator::filename;
	using basefileoperator::file;
	using basefileoperator::field;
public:
	bool openfile();
	bitfield read();
};

bitfield filereader::read()
{
	file.read((char*)&field,1);
	return field;
}

bool filereader::openfile()		//открытие файла
{
	if(!filename) return false;
	file.open(filename,ios::in|ios::binary);
	return true;
}
/*********************************************************************************************/
/*********************************************************************************************/
/*********************************************************************************************/
/*********************************************************************************************/
class filewriter:public basefileoperator		//
{
protected:
	using basefileoperator::filename;
	using basefileoperator::file;
	using basefileoperator::field;
public:
	bool openfile();
	bitfield write();
};

bitfield filewriter::write()
{
	file.write((char*)&field,1);	
	return field;
}
bool filewriter::openfile()		//открытие файла
{
	if(!filename) return false;
	file.open(filename,ios::out|ios::binary);
	return true;
}
/***********************************************************************************************/

Последний раз редактировалось Farrel; 20.02.2011 в 14:39.
Farrel вне форума Ответить с цитированием
Старый 22.02.2011, 00:32   #2
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

кого всё же интересует решение проблемы, вам сюда
Farrel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разграничение прав доступа Len@09 БД в Delphi 24 03.11.2009 15:39
Ошибка: Нарушение доступа к памяти. VladimirAleks Общие вопросы Delphi 6 03.11.2009 14:42
Нарушение доступа по адресу *** в модуле 'rtl60.bpl' rfcr Общие вопросы Delphi 5 14.09.2009 16:19
Нарушение доступа Perception Помощь студентам 9 11.07.2008 14:44
Нарушение прав иконок трея joker Win Api 4 24.11.2007 07:33