2011-02-23 3 views
3

부스트의 이진 직렬화를 사용하고 지금까지 제대로 작동했습니다. I 출력 (oarchive)에 대한 직렬화 포인터의 std::list을 가지고 있지만 직렬화 MSVC의 대화와 객체의 직렬화() 함수 내에서 실패부스트 직렬화 어설 션이 실패했습니다.

Assertion failed: 0 == static_cast<int>(t) || 1 == static_cast<int>(t), file c:\program files\boost\boost_1_44\boost\archive\basic_binary_oprimitive.hpp, line 91

: 콘솔 창에 인쇄

R6010 -abort() has been called

와 같은 문자열

무슨 뜻입니까?

프로젝트가 꽤 크고 소스가 배포되어 있으므로 여기에 코드를 게시 할 수 없지만 간단한 프로젝트 내에서이 오류를 시뮬레이트하려고했습니다. 이상한 점이 있습니다.

P. Windows XP에서 부스트 1.44과 MSVC2010EE를 사용합니다. 내가 클릭하면 윈도우 디버거가 직렬화 archive << myList; 라인의 코드 라인 다음에 화살표를 보여줍니다! "디버그 오류"의 "을 다시 시도"- 나는 오류가 일부 소멸 또는 무언가에 발생한 것 같다 의미한다. 개체 serialize() 함수를 변경할 때 - 전체 프로젝트를 다시 컴파일 할 때 적용됩니다 (컴파일 전에 정리) -하지만 방금 컴파일 한 경우 (IDE에서 변경된 헤더가 포함 된 모든 소스가 다시 컴파일된다는 것을 보여줍니다) - 아니요 변경 사항은 런타임에서 (printf()로 시도한) 마지막 버전 이후에 발생합니다 - 이상합니다. 간혹 몇 가지 중요한 정의를 설정할 수 있습니까?

+0

코드 없이는 도움이되지 않습니다. 이것을 재현 할 수있는 작은 예제로 끓여 여기에 포함시킬 수 있습니까? –

답변

7

문제의 선은 말한다 :

// trap usage of invalid uninitialized boolean which would 
// otherwise crash on load. 

그것은 당신이 초기화되지 않은 bool를 직렬화하려고하는 어떤 점에서 같다. 추가 코드가 없으면 어떤 코드를 찾도록 도와 드릴 수 없습니다.

+0

정말 대단해! 충돌 직전! – Slav

+0

흠, 그럼 내가 어떻게해야합니까? #include ? - 그러한 파일이 없습니다. – Slav

+4

즉, 변수 'bool tmp;'를 초기화하지 않고 선언하는 것입니다 :'bool tmp = 0;' – karlphillip