Microsoft MVP성태의 닷넷 이야기
.NET Framework: 20. System.AccessViolationException 예외가 발생한 한 예. [링크 복사], [링크+제목 복사],
조회: 32726
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

좀 더 정확히는, 아래와 같은 오류가 발생했습니다.

System.AccessViolationException: attempted to read or write protected memory. This is often an indication that other memory has been corrupted.
 at Microsoft.Office.Interop.InfoPath.SemiTrust._Application2.get_Name()
 at InfoMHost.MyHost.LoadTarget( Object pApp, Object pDoc, String infoXMLText ) in ...... line XX

PIA 어셈블리를 통해서 실제 COM 개체의 메서드/프로퍼티를 호출하는 데 위와 같은 오류가 발생한 것입니다.

직접적인 원인은, PIA 어셈블리에서 구현된 타입의 Method 순서와 실제 COM 개체의 IDL 파일에 정의된 순 가상 함수의 순서가 일치하지 않아서 발생한 것이였습니다.

"Attempted to read or write protected memory" 라고 하는 것은, 즉 PIA 를 통해서 vtable 의 3번째에 있는 함수를 호출했으나, 실제 COM 개체에서는 ( 예를 들어 ) 5번째에 있는 함수 호출을 발생시키다 보니 입력인자/반환인자가 일치하지 않아서 잘못된 메모리 접근을 하게 되어서 그런 듯 싶습니다.

즉, 위와 같은 경우에서만 발생하는 것이 아니고 그 외의 모든 "잘못된 메모리 접근" 에 대해서 발생할 수 있는 문제이므로 버그를 잡는 것이 상당히 어려운 경우라고 할 수 있겠습니다.

이번에는 그나마 좀 쉽게 해결했지만 ^^; 개인적으로 다시는 보고 싶지 않은 예외입니다.








[최초 등록일: ]
[최종 수정일: 1/19/2005]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




1  2  3  4  5  6  7  8  9  10  11  12  [13]  14  15  ...
NoWriterDateCnt.TitleFile(s)
13737정성태9/21/202412110개발 환경 구성: 727. Visual C++ - 리눅스 프로젝트를 위한 빌드 서버의 msbuild 구성
13736정성태9/20/202411888오류 유형: 923. Visual Studio Code - Could not establish connection to "...": Port forwarding is disabled.
13735정성태9/20/202410969개발 환경 구성: 726. ARM 플랫폼용 Visual C++ 리눅스 프로젝트 빌드
13734정성태9/19/202410913개발 환경 구성: 725. ssh를 이용한 원격 docker 서비스 사용
13733정성태9/19/202410946VS.NET IDE: 194. Visual Studio - Cross Platform / "Authentication Type: Private Key"로 접속하는 방법
13732정성태9/17/202411684개발 환경 구성: 724. ARM + docker 환경에서 .NET 8 설치
13731정성태9/15/202413324개발 환경 구성: 723. C# / Visual C++ - Control Flow Guard (CFG) 활성화 [1]파일 다운로드2
13730정성태9/10/202413466오류 유형: 922. docker - RULE_APPEND failed (No such file or directory): rule in chain DOCKER
13729정성태9/9/202414412C/C++: 173. Windows / C++ - AllocConsole로 할당한 콘솔과 CRT 함수 연동 [1]파일 다운로드1
13728정성태9/7/202414097C/C++: 172. Windows - C 런타임에서 STARTUPINFO의 cbReserved2, lpReserved2 멤버를 사용하는 이유파일 다운로드1
13727정성태9/6/202414326개발 환경 구성: 722. ARM 플랫폼 빌드를 위한 미니 PC(?) - Khadas VIM4 [1]
13726정성태9/5/202412263C/C++: 171. C/C++ - 윈도우 운영체제에서의 file descriptor와 HANDLE파일 다운로드1
13725정성태9/4/202411147디버깅 기술: 201. WinDbg - sos threads 명령어 실행 시 "Failed to request ThreadStore"
13724정성태9/3/202414519닷넷: 2296. Win32/C# - 자식 프로세스로 HANDLE 상속파일 다운로드1
13723정성태9/2/202413370C/C++: 170. Windows - STARTUPINFO의 cbReserved2, lpReserved2 멤버 사용자 정의파일 다운로드2
13722정성태9/2/202410958C/C++: 169. C/C++ - CRT(C Runtime) 함수에 의존성이 없는 프로젝트 생성
13721정성태8/30/202410722C/C++: 168. Visual C++ CRT(C Runtime DLL: msvcr...dll)에 대한 의존성 제거 - 두 번째 이야기
13720정성태8/29/202411837VS.NET IDE: 193. C# - Visual Studio의 자식 프로세스 디버깅
13719정성태8/28/202411012Linux: 79. C++ - pthread_mutexattr_destroy가 없다면 메모리 누수가 발생할까요?
13718정성태8/27/202413743오류 유형: 921. Visual C++ - error C1083: Cannot open include file: 'float.h': No such file or directory [2]
13717정성태8/26/202413994VS.NET IDE: 192. Visual Studio 2022 - Windows XP / 2003용 C/C++ 프로젝트 빌드
13716정성태8/21/202411769C/C++: 167. Visual C++ - 윈도우 환경에서 _execv 동작 [1]
13715정성태8/19/202414365Linux: 78. 리눅스 C/C++ - 특정 버전의 glibc 빌드 (docker-glibc-builder)
13714정성태8/19/202411868닷넷: 2295. C# 12 - 기본 생성자(Primary constructors) (책 오타 수정) [3]
13713정성태8/16/202414672개발 환경 구성: 721. WSL 2에서의 Hyper-V Socket 연동
13712정성태8/14/202412724개발 환경 구성: 720. Synology NAS - docker 원격 제어를 위한 TCP 바인딩 추가
1  2  3  4  5  6  7  8  9  10  11  12  [13]  14  15  ...