2016-10-16 4 views
0

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

코드를 호출 동일한 테스트를 시도했다.

+0

나는 충돌하는 ABI를 연결한다고 말하고 싶습니다. 여기에서 말하기는 어렵지만 대상 설정 (디버그/릴리스, 아키텍처 (32/64 비트), 예외 처리 등, 공유 라이브러리/정적 런타임)의 차이점을 확인하는 것은 어렵습니다. – sehe

+0

sehe, 맞아요. 서로 다른 부스트 버전을 혼합했습니다. 솔루션의 프로젝트 – Andre

답변

1

문제는 포함 된 헤더와 사용 된 라이브러리 (1.61, 1.59)에서 서로 다른 버전의 부스트입니다. 내 실수.

VS Projects의 속성을 수정하면 코드가 예상대로 작동합니다. 힌트를 주셔서 감사합니다.

+0

건배. 발견 한 내용을 게시하려면 +1하십시오. – sehe

관련 문제