Это не ответ, а список, который слишком длинен, чтобы быть в комментарии.
Я посмотрел сборку для выпуска выпуска кода с нарушением.Увидеть ниже.Я пометил AV на правильной строке инструкций 5 строк снизу.
int _tmain(int argc, _TCHAR* argv[])
{
000116E8 mov r12, sp
000116EC stmdb sp!, {r11, r12, lr}
000116F0 add r11, sp, #0xC
000116F4 sub sp, sp, #0x98
000116F8 ldr r3, [pc, #0x10C]
000116FC ldr r3, [r3]
00011700 str r3, [r11, #-0x10]
try
{
throw std::runtime_error( "a" );
00011704 mov r2, #0
00011708 mov r1, #0
0001170C sub r0, r11, #0x84
00011710 bl |std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Tidy ( 11118h )|
00011714 ldr r1, [pc, #0xEC]
00011718 mov r2, #1
0001171C sub r0, r11, #0x84
00011720 bl |std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign ( 114d0h )
00011724 sub r1, r11, #0x84
00011728 sub r0, r11, #0x68
0001172C bl |std::runtime_error::runtime_error ( 115ach )|
00011730 ldr r1, [pc, #0xC4]
00011734 sub r0, r11, #0x68
00011738 bl 000118F0
return 0;
0001173C ldr r0, [r11, #-0x10]
00011740 bl 00011C70
00011744 mov r0, #0
}
00011748 sub sp, r11, #0xC
0001174C ldmia sp, {r11, sp, pc}
00011750 andeq r3, r1, r8, ror r0
00011754 andeq r4, r1, r0, ror #3
}
catch( std::runtime_error& e11 )
00011758 str lr, [sp, #-4]!
{
throw;
0001175C mov r1, #0
00011760 mov r0, #0
00011764 bl 000118F0
00011768 andeq r3, r1, r8, ror r0
0001176C andeq r4, r1, r0, ror #3
}
}
catch( std::runtime_error& e12 )
00011770 str lr, [sp, #-4]!
{
e12.what(); // access violation
00011774 ldr r0, e12, #-0xA4
00011778 ldr r3, [r0] // AV
0001177C mov lr, pc
00011780 ldr pc, [r3, #4]
00011784 ldr r0, [pc, #0x78]
00011788 ldr pc, [sp], #4