부스트 직렬화를 사용하여 데이터베이스를 저장하려고하면 해결할 수없는 segfault가 발생합니다. 도와 주시겠습니까? 어떤 제안이라도 대단히 감사하겠습니다. 내가 범인으로 아래의 문을 고정하지만부울 :: 직렬화를 사용하여 데이터를 저장할 때 오류가 발생했습니다.
oa << *this;
내 코드 섹션은 다음과 같습니다 그것을 해결하는 방법을 잘 모르는 것 : 나는 지점을 핀 수 있었다
template<class Archive>
void nDB::serialize(Archive &ar, const unsigned int version) {
ar & _LAYERS;
ar & _MACROS;
ar & _MODULES;
ar & _INSTS;
}
void nDB::save_db(string filename) {
std::ofstream ofs(filename.c_str(), std::ios::out | std::ios::binary);
//assert(ofs.good());
boost::archive::binary_oarchive oa(ofs);
oa << *this;
ofs.close();
}
안녕, 내 데이터베이스의 순환 참조로 발행하십시오. 코드는 다음과 같습니다 :
template<class Archive>
void pin::serialize(Archive &ar, const unsigned int version) {
ar & pin_Port;
ar & pin_Layer;
}
및
template<class Archive>
void port::serialize(Archive & ar, const unsigned int version){
ar & port_Name;
ar & port_Use;
ar & port_Dir;
ar & port_PINS;
}
안녕하세요 아래 내가 범인 ofs.close();
의심 내 클래스 정의
class pin {
public:
port* pin_Port;
layer* pin_Layer;
// rect* pin_shape;
pin();
~pin();
void set_port(port*);
void set_layer(layer*);
string get_name();
port* get_port();
layer* get_layer();
string get_layer_name();
double get_layer_width();
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version);
};
class port {
public:
string port_Name;
char port_Use;
char port_Dir;
pin_vector port_PINS;
port();
~port();
void set_name(string);
void set_use(int);
void set_dir(int);
string get_name(void);
string get_use(void);
string get_dir(void);
void add_pin(pin*);
pin_vector get_all_pins(void);
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version);
};
안녕 ildjarn , 나는 당신이 제안한 것을했지만 그것을 해결하지는 못합니다. 코드에 문제가있는 것이 있습니까? 고마워요 ildjarn –
@Binh : 아니요, 말할 수있을만큼 충분한 코드를 보여주지 않았습니다. ;] 현재 표시된 코드의 경우'ofs.close();를 제거하면 상태가 양호 해 지므로 표시되지 않은 코드에 문제가 있어야합니다. – ildjarn
감사합니다 ildjarn, 당신은 절대적으로 옳습니다. 내 데이터베이스에서 순환 참조로 문제를 공제 할 수있었습니다. 디버깅을 위해 내가 수행 한 작업은 각 클래스의 serialize 함수에서 각 구성 요소를 순차적으로 끄는 것이 었습니다. 결국 나는 원형 참조에서 유래했는지를 확인할 수있었습니다. 이제 내 질문에 순환 참조를 돌보는 부스트 직렬화를 만드는 방법으로 압축되거나 전혀 불가능할 것 같다. 순환 참조에 대한 내 코드는 다음과 같습니다. –