IT Story/Programming Language

Visual Studio 에서 재미있는 delete 현상

soyoja 2009. 3. 25. 17:25
반응형


Visual Studio 에서 빌드 중 재미있는 현상을 하나 발견하였다.




위의 코드는 VS6.0 / VS 2005 / VS 2008 모두 디버그 모드에서는 Assertion Failed 에러를 보고하지만 Release 모드에서는 정상적으로 실행된다.

C++ 의 명저인 Effective C++ 의 항목 10 에서는 "new 를 썼을 때 delete 를 써라"(Item 10: Write operator delete if you write operator new. ) 는 내용을 명시하고 있다. 뭐 C++ 에 있어서 가장 기본적인 부분이라 할 수 있다.

위에서는 new 를 써서 동적으로 할당하지 않은 객체인 dat 를 delete 하려고 시도하고 있기 때문에 Visual Studio 컴파일러에서 Debug Assertion Failed 에러를 발생시킨다.  



이런 코드가 release 모드에서 정상적으로 실행되는 것도 이상하다. 하다못해 컴파일러가 warning 이라도 띄워주는 것이 맞지 않을까 싶다.