반응형


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 이라도 띄워주는 것이 맞지 않을까 싶다.

+ Recent posts