boost :: serialization을 사용하여 디버깅 목적으로 일부 객체의 빠른 직렬화를 설정하고 싶습니다.boost :: serialization 스택이 text_oarchive 객체로 인해 손상되었습니다.
간단한 독립 실행 형 Win32 콘솔 응용 프로그램 (32 비트 및 64 비트)에서 아래 기능을 성공적으로 테스트했으며 예상대로 작동했습니다.
내 주요 Visual Studio 솔루션 (64 비트)의 기능을 사용하면 "런타임 검사 실패 # 2 - 변수 'oa'주위의 스택이 손상되었습니다." 기능을 종료 할 때. 만든 파일이 정상적으로 보이지만 예상대로 응용 프로그램이 충돌합니다. 처음에 나는 ofstream
을 닫지 않았기 때문에 이런 일이 일어난다 고 생각했지만 이것이 도움이되지 않습니다.
QuantLib
에 암시 된 간단한 매트릭스 구조를 보관하려고하는데, 오류 메시지의 원인이 text_oarchive 객체에 관한 것입니다.
void saveMatrix(const Matrix &m, const char* fileName){
ofstream file(fileName);
text_oarchive oa(file);
oa << m.rows() << m.columns();
for (Matrix::const_iterator it = m.begin(); it != m.end(); it++)
oa << *it;
file.close();
}
나는이 일 테스트 프로젝트에서 응용 프로그램/솔루션 및 테스트 프로젝트 내가 손상된 스택을 얻을 첫 번째에서
Matrix m(2, 3, 0);
m[0][0] = 2.3; m[0][1] = 1.2; m[0][2] = 22;
m[1][0] = 7.3; m[1][1] = 8.2; m[1][2] = 8.22;
saveMatrix(m, "testArchive.txt");
코드를 호출 동일한 테스트를 시도했다.
나는 충돌하는 ABI를 연결한다고 말하고 싶습니다. 여기에서 말하기는 어렵지만 대상 설정 (디버그/릴리스, 아키텍처 (32/64 비트), 예외 처리 등, 공유 라이브러리/정적 런타임)의 차이점을 확인하는 것은 어렵습니다. – sehe
sehe, 맞아요. 서로 다른 부스트 버전을 혼합했습니다. 솔루션의 프로젝트 – Andre