2010-06-21 3 views
1

나는 이것에 관하여 많은 정보를 찾지 못했습니다. 따라서 VS2005를 사용하여 빌드 된 프로젝트가 있으므로 mscvr80.dll을 사용합니다. 내 프로젝트는 또한 타사 라이브러리를로드 한 다음 mscvrt60.dll을로드합니다.여러 mscvrt **. dll 버전을로드하는 데 문제가 있습니까?

이제 프로그램에서 메모리 읽기 위반으로 프로그램이 중단되는 이상한 버그가 있습니다. 디버그에서 디버그는 내 검색에서 초기화되지 않은 메모리 위치를 나타내는 0xcdcdcdcd에 있습니다. 디버거는 위반이 제 3 자 라이브러리의 알 수없는 함수 내에 있음을 나타냅니다.

본인은이 라이브러리의 소유자에게 연락했으며 설명 된대로 오류를 알 수 없습니다. 또한 VS60에서 컴파일 된 다른 프로젝트가 있는데이 라이브러리는이 타사 라이브러리를 사용하며 유사한 오류가 없습니다. 그래서 궁금, 여러 공통 런타임 버전을 사용하여 문제가있을 수 있습니까? 하나의 런타임 (.dll에서 말하면)이 메모리를 할당 할 수있는 상황을 모호하게 기억하고 있으며 다른 버전이이 메모리를 확보하려고 시도하면 문제가 발생할 수 있습니다. 그러나, 나는 이것을 읽은 곳을 기억할 수 없으며 주제에 대한 많은 정보를 찾을 수 없습니다.

모든 의견을 보내 주시면 감사하겠습니다.

답변

1

다른 버전에서 한 버전의 런타임에 할당 된 메모리를 확보하면 확실히 문제가 발생할 수 있습니다. CRT 힙의 구현 세부 사항이 버전간에 동일하게 유지된다는 보장은 없습니다. 다른 해결 방법을 찾을 수 없으면 mscvrt60.dll에 대해 응용 프로그램을 컴파일 해보십시오.

+0

v60과 비교하여 프로젝트를 컴파일하는 간단한 방법이 있습니까? 실제로 Visual C++ 6.0으로 솔루션을 다운 그레이드하려고하지 않고 있습니까? – DeusAduro

+0

VC6을 설치했다면 링커 설정에서 "기본 라이브러리 없음"옵션을 선택할 수 있습니다. 그런 다음 수동으로 이전 librairies 가리 킵니다. –

1

0xcdcdcdcd가 표시되면 디버그 런타임 라이브러리와 릴리스 런타임 라이브러리가 혼합되어있을 수 있습니다. 그들은 함께 작동해야하지만 릴리스 런타임 만 사용하여 문제를 복제 해보십시오.

+0

고마워,하지만로드 된 라이브러리를 확인했습니다 그리고 그것은 분명히 모두 디버그 (디버그)와 두 릴리스 (릴리스 때)입니다. – DeusAduro

관련 문제