2012-02-14 6 views
0

벡터의 push_back 메서드가 호출 될 때 C++ 예외가 throw됩니다. 디버거에서 xmemory 파일에 예외가 발생했습니다.xmemory 코드에서 C++ 예외가 발생했습니다.

// TEMPLATE FUNCTION _Destroy 
template<class _Ty> inline 
void _Destroy(_Ty _FARQ *_Ptr) 
{ // destroy object at _Ptr 
    _DESTRUCTOR(_Ty, _Ptr); 
} 

내가 bad_alloc 뿐이다 캐치 처리기 시도 - 캐치의 코드를 포장하려하기 때문에 bad_alloc 뿐이다 예외로 표시되지 않습니다 : 나는 예외가 일어날 볼 곳 여기입니다. 코드가 그 단계를 저촉했습니다. 항상 (...) catch 핸들러로 들어갑니다. bad_alloc 예외가 아니면 어떤 일이 벌어 질 수 있습니까?

+0

[Rule of three] (http://en.wikipedia.org/wiki/Rule_of_three_ (C % 2B % 2B_programming))를 따르고 있습니까? –

+1

개체의 종류는 무엇입니까? 예외 유형은 무엇입니까? 여기에 표시된 함수는 예외의 원점이 아니라는 것을 알 수 있습니다. 소멸자는 거의 예외를 throw하지 않습니다. (Like : 결코) –

답변

0

xmemory 헤더는 표준 C++ 라이브러리 (예 : MSVC++와 함께 제공됨)의 Dinkumware 구현에 대한 구현 세부 사항입니다. 실제 오류는이 특정 기능과 관련이 거의 없습니다. _DESTRUCTOR 매크로를 확장 할 수 있는지 (-E 또는/E 컴파일러 플래그를 사용하여 찾을 수 있음) 알지 못하지만 관련 유형의 소멸자를 확실히 호출합니다. 이 매크로가 예외를 던지거나 내 소멸자가 예외를 던질 수 있는지 여부를 확인합니다. 또한 예외가 무엇인지 더 잘 처리하려면 std::exception const&을 잡으십시오. 예외가 발생하면 모든 예외가이 유형에서 파생되는 것이 좋습니다. 이것은 표준 C++ 라이브러리에 의해 던져진 모든 예외에 대해 사실입니다. 그러나 일부 시스템에서는 정의되지 않은 동작으로 인해 예외가 발생하며 std::exception에서 파생되지 않을 수 있습니다 (예 : 코드가 메모리를 여러 번 릴리스하는 경우). std::exception에서 파생 된이 조언을 따르지 않으면 불행히도 디버깅 예외가 훨씬 더 어렵게됩니다. std::exception const&을 잡았을 때 what() 회원 인 std::exception을 사용하면 무엇을하는지 확인할 수 있습니다.

관련 문제