티스토리 뷰

얼마전에 이런 질문을 받았어요.


"malloc, new로 메모리 할당시 실패하면 항상 null 값이 return 되나요?"


당연히 null일줄 알았지만, 막상 질문을 받고나니 "아닐수도 있을까?"라는 생각이 들었고, 찾아본 내용을 포스팅하고자 합니다.



 malloc

https://msdn.microsoft.com/en-us/library/6ewkz86d.aspx

msdn에서 malloc을 찾으니 더 찾아볼것도 없이 바로 return value라고 써있네요.


"malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available."

 할당된 메모리공간의 void pointer를 return하거나, 메모리공간이 부족하면 NULL을 return한다. (void pointer를 return 하므로 필요에 따라 casting을 해야합니다.)


 new

https://msdn.microsoft.com/library/d1af4b56-9a95-4c65-ab01-bf43e982c7bd.aspx#Anchor_2

 operator new부분의 remarks를 보면 다음과 같이 되어있습니다! 

 영어라서 괜히 더 길어보이지만.. 중요한 부분만 해석을 해봤습니다.


" new로 메모리 할당하려는 시도가 성공하면, 할당된 메모리공간의 포인터를 리턴하지만, 실패하면 지정된 new handler를 call한다고 합니다. new handler의 기본 기능은 bad_alloc type의 객체를 throw하는 것입니다. "


https://msdn.microsoft.com/ko-kr/library/kftdy56f.aspx

이 문서를 보니까 한글이라서 더 좋네요(..) 


C++에서는 new 및 delete 연산자를 사용하여 개체의 동적 할당 및 할당 해제를 지원합니다. 이러한 연산자는 사용 가능한 저장소라고 하는 풀에서 개체에 대한 메모리를 할당합니다.  new 연산자는 operator new 특수 함수를 호출하고, delete 연산자는 operator delete 특수 함수를 호출합니다.

Visual C++ .NET 2002에서 표준 C++ 라이브러리의 new 함수는 C++ 표준에서 지정된 동작, 즉 메모리 할당이 실패하는 경우 std::bad_alloc 예외를 throw하는 동작을 지원합니다.

C 런타임 라이브러리의 new 함수도 메모리 할당이 실패하는 경우 std::bad_alloc 예외를 throw합니다.


 결국 new에서 메모리 할당에 실패하면  std::bad_alloc을 throw하며, 메모리 할당 실패를 잡아내려면 null pointer가 반환되는지 확인하는게 아니라 bad_alloc 예외를 잡아서 처리해야 하네요. 


 이걸 찾다보니까 new연산자와 operator new가 따로 있다는걸 알게되어서, 조만간 또 포스팅을 할 것 같네요.

 그럼 안녕~


*의견, 조언 언제나 환영이에요!

'C,C++' 카테고리의 다른 글

[C++] stl. set에 관하여!  (0) 2016.11.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함