У меня есть такой класс:
struct SomeClass{
SomeClass(){}
SomeClass(const SomeClass& rhs):
_m1(rhs._m1),
_m2(rhs._m2),
_m3(rhs._m3),
_m4(rhs._m4){}
SomeClass& operator=(const SomeClass& rhs){
// same as above
return *this;
}
int _m1;
std::vector<int> _m2;
std::vector<int> _m3;
int _m4;
};
В какой-то момент в моей программе я хочу сохранить данные, хранящиеся в объекте SomeClass
, для последующего использования:
SomeClass someObj = arr->getBest(); // arr is a pointer to AnotherClass,
// in which different SomeClass
// objects are initialized and then
// involved in various
// computations in AnotherClass,
// finally the best one SomeClass
// object will be save here
fwrite(&someObj, sizeof(SomeClass), 1, saveFile);
После сохранения файла в saveFile
, я пытаюсь прочитать его и получаю ошибку:
SomeClass readingSomeObj;
fread(&readingSomeObj, sizeof(SomeClass), 1, savedFile));
Жалобы компилятора "Расположение чтения нарушения доступа 0x ...".Наблюдая за местными жителями в VS, я вижу, что два других поля readingSomeObj
, а именно _m1
и _m4
имеют значения в них, но не _m2
и _m3
, в VS это говорит "неспособно прочитать память».
Кроме того, проблема связана с SomeClass
, а именно с этой строкой _m2(rhs._m2),
.
Но когда я сохранял someObj
встрока fwrite(&someObj, sizeof(SomeClass), 1, saveFile);
Я видел, что два члена _m2
и _m3
из someObj
имеют значения (наведите указатель мыши на &someObj
).
Я не могу понять, что происходит не так,Я предполагаю, что проблема с конструкторами SomeClass
, но все же, как новичок в C ++, я не знаю, как это исправить.В других частях моей программы я использовал пустой конструктор SomeClass
для инициализации члена AnotherClass
.Но все работает нормально, за исключением этой части сохранения / чтения.Я ищу вашу щедрую помощь и спасибо миллион!