응용 프로그램이 다음 오류로 인해 충돌합니다.HEAP_NO_SERIALIZE 힙의 다중 스레드 액세스
===========================================================
VERIFIER STOP 00000003: pid 0x2E54: multithreaded access in HEAP_NO_SERIALIZE heap
00161000 : Heap handle
00001444 : Thread owning heap lock
00003188 : Current thread trying to acquire the heap lock
00000000 :
===========================================================
응용 프로그램의 전체 페이지 힙을 사용하도록 설정했습니다. 응용 프로그램이 임의의 위치에서 충돌합니다. 흔히 충돌 위치는 STL의 안쪽 부분입니다. 모든 경우에 콜 스택이 손상된 것으로 보입니다.
응용 프로그램은 라이브러리 및 DLL 파일 목록을 사용합니다. 모든 DLL 파일과 라이브러리는 다중 스레드 DLL 라이브러리 (명령 행 옵션 /MD
)로 빌드됩니다.
라이브러리 중 하나는 힙에 메모리를 할당하는 방법으로 HeapAlloc을 사용하고 있습니다.
충돌을 식별하기 위해 어떤 기법을 사용해야합니까?
도움이 될지 모르겠지만 [여기] (http://stackoverflow.com/a/758840/241536)는 WinDbg를 사용하는 방법에 대한 다른 포스터에 답한 답입니다. –
필요한 정보는 VERIFIER STOP 메시지에 있습니다. 동시에 비 직렬화 힙에 액세스하는 두 개의 스레드가 허용되지 않습니다. 두 스레드는 1444 및 3188입니다. 두 스레드가 동시에 동일한 힙에 액세스하지 못하도록 프로그램을 변경해야합니다. –