int _tmain(int argc, _TCHAR* argv[])
{
TCHAR * str = NULL;
__try
{
str = (TCHAR *)malloc(20);
}
__finally
{
if(str != NULL)
{
free(str);
str = NULL;
}
}
return 0;
}
예외 처리는 안전한 소프트 웨어를 만들기 위한 기본인데 몇가지 주의해야 한다.
우선 __try 내부로 들어온 다음 __finally 를 무조건 통과해서 나가는 것이 기본적인데, 주의해야할 점은 어떤 알 수 없는 오류로 인해 __try 내부의 메모리 할당이나 리소스 할당이 실패하는 경우, __finally 내부에서 무조건 메모리나 리소스를 해제 하려고 하면 '선언'은 되었지만 '초기화'가 되지 않은 포인터의 경우에는 "Run-Time Check Failure #3 - The variable 'str' is being used without being initialized." 라는 에러가 발생한다.
초기화 되지 않았으므로 알 수 없는 값을 가지고 있어서 그렇다. 이런 문제를 막으려면 애당초 포인터를 선언 할 때, NULL 값을 넣어주면 __finally 내부에서 if 로 NULL인지 아닌지를 체크하는 문법이 문제가 없이 잘 동작한다.
예외 처리를 잘 해야 하는 또 다른 이유는 하드웨어나 예상치 못한 문제로 프로그램이 이상 작동을 할 때 프로그래머의 잘못이 아님을 보여줄 수 있는 최후의 방패이기 때문이기도 하다.
'프로그래밍 > C++' 카테고리의 다른 글
Anatomy of a Program in Memory (0) | 2016.02.06 |
---|---|
typename에 대해 좋은글 발견! (0) | 2014.08.28 |
iexpress를 이용한 어플리케이션 재배포 패키지 만들기 (0) | 2012.12.15 |
Determining which DLLs to Redistribute (어떤 DLL을 재배포할껀가?) (0) | 2012.12.15 |
The Boost.Threads Library (2) | 2010.03.18 |