본문 바로가기

Testing Tools/CodeSonar

new 메모리 할당 연산자 사용시 유의할 점

C에서 malloc를 사용하여 메모리를 할당할 경우, NULL을 반환하는지 아닌지에 대한 여부로 메모리 할당 성공 여부를 판단하였다. C++에서 new 연산자를 사용하여 할당할 경우, 동일하게 NULL 반환 여부를 판단하는 코드를 작성하여(예시1의 코드와 같이) 정적분석(Codesona 등) 자동화 도구로 분석하면 Redundant Condition과 Unreachable Call의 두가지 오류를 보게 될 것이다.

C++에서 new 연산자는 기본적으로 자원할당 실패 시 std::bad_alloc를 발생하고 있기 때문이다.

(http://www.cplusplus.com/reference/new/bad_alloc/ 참고)


만약, C에서의 방식대로 NULL 반환여부로 판단하고 싶다면, 예시2) 와 같이 수정하면 된다.


예시1)

void test()

{

       int *p = NULL;

      

       p = new int[32];

      

       if ( p == NULL ) // Redundant Condtion

       {

             printf("hahaha\n"); // unreachable Call

   return;

       }

      

       delete [] p;

}

 

예시2)

void test3()

{

       int *p = NULL;

          

       p = new (std::nothrow) int[32]; // new 연산자로 할당시 (std::nothrow)를 추가

          

       if ( p == NULL )

       {

           printf("hahaha\n");

           return;

       }

          

       delete [] p;       

}