我正在尝试将一些数据转储到二进制文件中,然后从其他地方加载它,但在尝试读取保存的文件时,我一直收到Access Violation读取错误或_Block_Type_Is_Valid(pHead-> nBlockUse)错误。 / p>
这是保存文件的代码:
ofstream ofs(filename, ios_base::out | ios_base::binary);
// Write how many pop this file includes.
ofs.write((char*)&pop_size, sizeof(int));
// And the vectors
ofs.write((char*)&tmp_p[0], (tmp_p.size() * sizeof(TSOP)) );
ofs.close();
这是阅读方法(我尝试了几种组合):
ifstream ifs;
ifs.open(filename, ios_base::in | ios_base::binary);
int pop_size = -1;
ifs.read((char*)&pop_size, sizeof(int));
ifs.read(reinterpret_cast<char *>(&tmp_p[0]), sizeof(TSOP) * tmp_p.size());
ifs.close();
(我也试过保存,并在循环中读取每个元素,而不是reinterpret_cast我刚刚使用(char *),没有任何工作..)
向量包含类TSOP的元素,如下所示:
class TSOP
{
public:
TSOP();
virtual ~TSOP();
void show();
TIndividual indiv;
vector <TIndividual> indiv_M;
vector <double> namda;
vector <double> namda_t;
vector <int> table; // the vector for the indexes of neighboring subproblems
bool updated;
void operator=(const TSOP&sub2);
};
和TIndividual:
class TIndividual{
public:
TIndividual();
virtual ~TIndividual();
vector <double> x_var;
//boost::dynamic_bitset<> x_var_bits;
//std::bitset<> x_var_bits2;
vector <double> y_obj;
vector <double> y_obj_n;
vector <double> y_blc;
//for constraints
vector <double> y_bio;
double y_bio_sum;
bool feasible;
//for constraints
//for NSGA-III
int pi_idx;
double d;
bool dominated;
//short dominateds;
void rnd_init();
void obj_eval(int count_index_start = 0);
void calc_balance();
bool operator<(const TIndividual &ind2);
bool operator>(const TIndividual &ind2);
bool operator==(const TIndividual &ind2);
void operator=(const TIndividual &ind2);
void show_objective();
void show_variable();
long id;
double var;
};
我读到保存二进制文件时指针和字符串可能有问题,但这些类中没有任何指针或字符串。 它主要由向量,整数和双精度组成。
通过使用cout,我能够读取pop_size的第一个int,然后在尝试读取保存的向量的第一个元素时,它崩溃了。
我在这里做错了什么?