我试图将一些数据转储到二进制文件中,然后从其他地方加载它,但在尝试读取保存的文件时,我一直收到Access Violation读取错误或_Block_Type_Is_Valid(pHead-> nBlockUse)错误 .

这是保存文件的代码:

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);
};

和个人:

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,然后在尝试读取保存的向量的第一个元素时,它崩溃了 .

我在这做错了什么?