Всем привет.
удивительно работает такой код с longjmp вызывает деструкторы все как полагается
написал как тест при чтении книги а оно корректно работает оказывается
ясно что фишка по всей видимости чисто майкрософтовская
этот код организует вечный цикл
void zzz(jmp_buf&jbuf)
{
longjmp(jbuf, 1);
}
void rcu(jmp_buf&jbuf)
{
std::vector<char> vec(1000000);
zzz(jbuf);
}
int main()
{
jmp_buf jbuf;
setjmp(jbuf);
rcu(jbuf);
}
поствил бряк в деструкторе вектора
> testlinkage.exe!std::vector<char,std::allocator<char> >::~vector<char,std::allocator<char> >() Line 558 C++
msvcr90d.dll!_CallSettingFrame(unsigned long funclet=0x0013fec4, unsigned long pRN=0x00000103, unsigned long dwInCode=0x17e512f3) Line 73 Asm
msvcr90d.dll!__FrameUnwindToState(EHRegistrationNode * pRN=0x0013fec4, void * pDC=0x0013fab0, const _s_FuncInfo * pFuncInfo=0x00418600, int targetState=0xffffffff) Line 1151 C++
msvcr90d.dll!__InternalCxxFrameHandler(EHExceptionRecord * pExcept=0x0013fdac, EHRegistrationNode * pRN=0x0013fec4, _CONTEXT * pContext=0x0013fabc, void * pDC=0x0013fab0, const _s_FuncInfo * pFuncInfo=0x00418600, int CatchDepth=0x00000000, EHRegistrationNode * pMarkerRN=0x00000000, unsigned char recursive=0x00) Line 479 + 0x13 bytes C++
msvcr90d.dll!__CxxFrameHandler3(EHExceptionRecord * pExcept=0x0013fec4, EHRegistrationNode * pRN=0x0013fabc, void * pContext=0x0013fab0, void * pDC=0x0013fec4) Line 311 + 0x1f bytes C++
ntdll.dll!ExecuteHandler2@20() + 0x26 bytes
ntdll.dll!ExecuteHandler@20() + 0x24 bytes
msvcr90d.dll!_longjmp() + 0x4e bytes Asm
testlinkage.exe!__tmainCRTStartup() Line 582 + 0x19 bytes C
testlinkage.exe!mainCRTStartup() Line 399 C
kernel32.dll!_BaseProcessStart@4() + 0x23 bytes