다음을 통해 공유


리소스 정리

종료 처리기를 실행 하는 동안 여 종료 처리기를 호출 하기 전에 어떤 자원이 실제로 할당 된 알 수 없습니다.것에 __try 문 블록 모든 열린 된 있도록 중단 했습니다 모든 리소스 할당 된 전에.

따라서 안전 하 게 하려면 실제로 종료 처리 정리를 계속 하기 전에 열려 있는 리소스를 참조 하십시오 확인 해야 합니다.권장 되는 절차는 다음과 같습니다.

  1. 핸들을 NULL로 초기화 합니다.

  2. 에 __try 문 블록에서 리소스를 할당 합니다.리소스를 할당 핸들 양수 값으로 설정 됩니다.

  3. 에 있는 __finally 문 블록을 가진 해당 핸들 또는 플래그 변수는 0이 아닌 각 리소스 해제 또는 not NULL입니다.

예제

예를 들어, 세 개의 파일에서 할당 된 메모리 블록을 닫습니다 종료 처리기에 다음 코드를 사용의 __try 문 블록입니다.리소스를 정리 하기 전에, 코드 먼저 해당 자원에 할당 된 경우 확인 합니다.

// exceptions_Cleaning_up_Resources.cpp
#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>
#include <windows.h>

void fileOps() {
   FILE  *fp1 = NULL,
         *fp2 = NULL,
         *fp3 = NULL;
   LPVOID lpvoid = NULL;
   errno_t err;

   __try {
      lpvoid = malloc( BUFSIZ );

      err = fopen_s(&fp1, "ADDRESS.DAT", "w+" );
      err = fopen_s(&fp2, "NAMES.DAT", "w+" );
      err = fopen_s(&fp3, "CARS.DAT", "w+" );
   }
   __finally {
      if ( fp1 )
         fclose( fp1 );
      if ( fp2 )
         fclose( fp2 );
      if ( fp3 )
         fclose( fp3 );
      if ( lpvoid )
         free( lpvoid );
   }
}

int main() {
   fileOps();
}

참고 항목

참조

종료 처리기를 작성합니다.

구조적된 예외 처리 (C++)