FIX: 여러 번 메모리 해제를 응용 프로그램 오류 Visual C++에서 발생할 수 있습니다.

기술 자료 번역 기술 자료 번역
기술 자료: 194550 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

여러 번 해제된 메모리 응용 프로그램 오류가 발생할 수 있습니다.

참고: 여러 삭제하고 malloc와 무료 또는 새 여러 사용 여부에 true 입니다.

원인

또는 free() 로 아직 할당되지 않은 수 및 더 이상 또는 free() 로 아직 할당되지 않은 후속 호출을 사용할 수 있는 상태로 첫 번째 호출 후 힙 제어 구조는 수정할 수 없습니다.

해결 방법

사용 가능한 여러 호출 않도록 또는 여러 삭제 시 같은 포인터. 이 문제를 방지하기 위해 한 삭제하거나 사용 가능한 호출한 후 null 포인터를 할당하는 방법입니다. 삭제 및 사용 가능한 함수에 null 포인터를 인수로 전달되는 경우 아무 것도 수행하지 않고 반환합니다. 이 경우 사용 가능한 위치에 맞지 않거나 삭제 여러 포인터가 동일한 메모리 위치를 가리키는 호출됩니다.

타사 응용 프로그램에 이 문제가 발생하는 고객은 돕기 위해 Microsoft는 새 C-런타임 라이브러리 DLL, 두 명의 힙 관리자, Visual C++ 5 호환 힙 관리자가 및 Visual C++ 6 호환 힙 관리자가 구현하는 Msvcrt.dll 출시했습니다. Visual C++ 버전을 사용하여 응용 프로그램의 만들어지며 해당 응용 프로그램에 적절한 힙 관리자를 사용합니다 검색합니다. 이 버전 6.0 이상의 경우 Visual C++ 6 호환 힙 관리자가 사용되고 버전보다 이전 버전인 경우 6, Visual C++ 5 호환 힙이 사용됩니다.

Visual Studio 6.0은 사용자는 최신 Microsoft Visual Studio 서비스 팩을 설치하면 이 새 msvcrt.dll 얻을 수 있습니다. 비-Visual Studio 사용자는 Microsoft 라이브러리 업데이트를 설치해야 합니다.

현재 상태

Microsoft는 Microsoft 버그가 있음을 확인했습니다 이 문서의 시작 부분에 나열된 제품에.
이 버그는 Visual Studio 6.0 서비스 팩 3에서 수정되었습니다. Visual Studio 서비스 팩에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.

194022Visual Studio 6.0 서비스 팩, 어떤, 위치, 이유

194295Visual Studio 서비스 팩이 설치되었는지 확인하는 방법

추가 정보

여러 번 메모리 해제가 정의되지 않은 동작이 발생합니다.

Visual C++ 6.0으로 빌드할 때 응용 프로그램 오류 원인 아래의 예제 코드 릴리스 빌드, 코드가 Visual C++ 5.0 빌드할 때 응용 프로그램 오류가 발생하지 않습니다.

디버그 빌드를 두 Visual C++ 6.0 또는 Visual C++ 5.0 있는 ASSERT 발급할:
   Debug Assertion Failed!
				

참고 중요합니다 작은 블록 힙 상태 (SBH) 에서 flux 지속적으로 것입니다. 이 때문에 경우에 가능한 없음 어설션 디버그 빌드에서 발급됩니다 있지만 릴리스 빌드 응용 프로그램 오류가 발생할 것입니다.

Visual C++ 6.0 릴리스 빌드에서 더 중요한 Visual C++ 5.0 에서 여러 번 것보다 메모리 해제를 수 있습니다. Visual C++ 5.0 작성된 경우, 아래 사례 약속 잘못된 호출이 단순한 위치 하나입니다. 또는 free() 로 아직 할당되지 않은 호출을 원래 더 멀리 떨어진 변경한 경우, 응용 프로그램 오류가 발생할 수 있습니다. 발생 가능성이 높은 있을 해당 메모리가 손상될 수 있습니다.

예제 코드

   // Compile options for Release builds /c
   // Compile options for Debug builds /c /Zi
   #include <malloc.h>
   int main(int argc, char* argv[])
   {
      char *pChar1 = (char *)malloc(10*sizeof(char));
      char *pChar2 = (char *)malloc(10*sizeof(char));
      free(pChar1);
      free(pChar1);
      return 0;
   }
				

속성

기술 자료: 194550 - 마지막 검토: 2005년 6월 4일 토요일 - 수정: 3.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
키워드:?
kbmt kberrmsg kbqfe kbbug kbcode kbcrt kbfix kbvs600sp2fix kbvs600sp3fix KB194550 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com