Я сделал набросок 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;
}
/***********************************************************************************************/