Как решить исключение нарушения доступа к памяти - PullRequest
0 голосов
/ 10 мая 2018

Фон

Я построил свое приложение, которое имеет следующий поток управления: -

Управляемая C ++ DLL (компилятор - VS2015, OS-windows 7) ->Библиотека C ++ (компилятор - VS2015, ОС - windows 7) -> Библиотека C (VS 2015 - win 7) -> Библиотека C (компилятор - gcc (minGW) - windows 10).

Я обращаюсь к памяти доступаошибка нарушения в библиотеке c ++ в нашей тестовой виртуальной машине (Windows 7 со средой выполнения VS2015).Это же приложение прекрасно работает на нашей машине разработки (Windows 7 с VS 2015).

Анализ

Поскольку я не могу воспроизвести это на моей машине для разработки, я не могу отладить поток.Сначала я попробовал с GetExceptioninformation(), который дал мне следующую информацию: -

Exception code: 0xc0000005
Fault offset: 0x00000000001271f0
Faulting process id: 0xedc
Faulting application start time: 0x01d3e6e36e2cbda8
Faulting application path: C:\Program Files\Microsoft Office\Office15\OUTLOOK.EXE
Faulting module path: C:\Users\Admin\AppData\Local\assembly\dl3\TMCVP0K3.2WC\VCW47EJV.PV7\26e400ac\00b47d69_f8e6d301\DarkMailEngine.DLL
Report Id: c4450271-52d6-11e8-a558-080027fa51ab

В качестве второго подхода я запустил WinDBG на моей тестовой машине, и он дал мне следующую трассировку стека: -

FAULTING_IP: 
ntdll!RtlSizeHeap+89
00000000`77506789 0fb74118        movzx   eax,word ptr [rcx+18h]

EXCEPTION_RECORD:  ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 0000000077506789 (ntdll!
+0x0000000000000089)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000000
   Parameter[1]: 00000f8668c7dd18
Attempt to read from address 00000f8668c7dd18

FAULTING_THREAD:  00000000000006d0

PROCESS_NAME:  OUTLOOK.EXE

ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.

EXCEPTION_PARAMETER1:  0000000000000000

EXCEPTION_PARAMETER2:  00000f8668c7dd18

READ_ADDRESS:  00000f8668c7dd18 

FOLLOWUP_IP: 
ntdll!RtlSizeHeap+89
00000000`77506789 0fb74118        movzx   eax,word ptr [rcx+18h]

MOD_LIST: <ANALYSIS/>

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

MANAGED_STACK: 
(TransitionMU)
000000002C02DEC0 000007FE8DD156FB UNKNOWN!DomainBoundILStubClass.IL_STUB_PInvoke(sqlite3*, Void*, Int32)+0x7b
000000002C02DF70 000007FE8DD1565C DarkMailEngine!<Module>.DarkMatter.Client.Internal.CppSQLite3DB.setPassword(DarkMatter.Client.Internal.CppSQLite3DB*, SByte*)+0x4c
000000002C02DFA0 000007FE8DD14842 DarkMailEngine!<Module>.DarkMatter.Client.Internal.ModelStore.initialize(DarkMatter.Client.Internal.ModelStore*, std.vector<unsigned char,std::allocator<unsigned char> >*)+0x152
000000002C02E0D0 000007FE8DD1420D DarkMailEngine!<Module>.DarkMatter.Client.Internal.ModelStore.initialize(DarkMatter.Client.Internal.ModelStore*)+0x9d
000000002C02E1E0 000007FE8DD13EA9 DarkMailEngine!<Module>.DarkMatter.Client.Internal.DatabaseOpenManager.{ctor}(DarkMatter.Client.Internal.DatabaseOpenManager*)+0x49
000000002C02E220 000007FE8DD188D9 DarkMailEngine!<Module>.DarkMatter.Client.Internal.ModelStore.getSetting(DarkMatter.Client.Internal.ModelStore*, std.vector<std::vector<unsigned char,std::allocator<unsigned char> >,std::allocator<std::vector<unsigned char,std::allocator<unsigned char> > > >*, std.basic_string<char,std::char_traits<char>,std::allocator<char> >*, std.basic_string<char,std::char_traits<char>,std::allocator<char> >*)+0x99

Может кто-нибудь подсказать, как можно решить эту проблему или какие могут быть возможные причины этой проблемы.

...