프로그래밍 언어/C/C++

[C++] new는 null을 return하는가?

소혼 2012. 1. 17. 23:33
반응형
작년에 malloc vs calloc이라는 글을 적었습니다.
그때는 급작스런 궁금증때문에 인터넷 검색+발번역을 했는데,
이번에는 new에 대해 신경쓰지 못했던 부분을 알게되었습니다.

흔히, new 나 malloc으로 메모리를 할당받고 난 후, 제대로 메모리가 할당되었는지 체크를 하지않는 경우가 많습니다.
하지만, 메모리가 부족한 상황은 얼마든지 나올 수 있으므로 체크를 해야 맞겠죠.

그렇다면, 어떻게 체크해야 할까요?
임베디드의 세상에서 malloc으로 메모리를 할당받은 후에는 null인지 확인하는 것이 보편적이라는 이야기를 들었습니다.

그렇다면 new는?
C++을 배울때 제대로 공부하신 분들은 이 질문의 답을 정확히 알것입니다.
네, new 는 0을 반환하지 않습니다. 일부러 그렇게 만들지 않는한 말이죠.(오퍼레이터 오버로딩)
대신 bad_alloc exception을 발생시킵니다.
따라서, 메모리할당 여부를 굳이 확인하려면, 아래와 같이 처리해야 합니다. (예제소스)
// bad_alloc example
#include <iostream>
#include <new>
using namespace std;

int main () {
  try
  {
    int* myarray= new int[10000];
  }
  catch (bad_alloc& ba)
  {
    cerr << "bad_alloc caught: " << ba.what() << endl;
  }
  return 0;
}

반응형