2010-12-08 3 views
1

나는 잠시 동안 pointer = new type[size]을 사용했으며 방금 malloc을 발견했습니다.malloc 대 새로운 사용

mallocnew 사이에 기술적 인 차이가 있습니까? 그렇다면, 다른 것을 사용하는 것의 이점은 무엇입니까?

답변

3

malloc은 함수 호출이며이 경우에는 새로운 표현식입니다.

차이점은 다음과 같습니다. new은 메모리를 할당하고 해당 배열의 모든 요소를 ​​기본 생성자로 구성합니다. malloc 그냥 초기화되지 않은 메모리 덩어리를 제공합니다.

::operator newstd::bad_alloc 또는 새 처리기가 등록되어있는 경우이를 처리합니다.

표준 라이브러리는 추가 매개 변수 nothrow을 허용하는 새 정의를 정의하며 할당이 실패하면 0 포인터를 반환합니다.

int *x = new(std::nothrow) int[20]; // include <new>, return 0 on failure 
+0

. 한 가지만 보았습니다. C#의 오래된 버전에서 free (NULL)가 정의되지 않은 효과를 가지지 만 delete [] NULL은 항상 명시 적으로 안전하다는 점을 기억합니다. 나는 그 사실에 대한 어떠한 증거도 즉시 발견 할 수 없으므로 이것이 내 오해인지 아닌지 궁금해지기 시작했다. – Tommy

+0

Tommy, IIRC free (0)가 정의됩니다. 그래도 C의 고대 버전에 대해서는 모르겠다;) –

+0

실제 사양이 없어도 C99과 아마도 C89에 있음을 알리는 인터넷 검색 결과는 잠재적 인 주장을 무효 화하는 것 이외의 다른 문제가 아니라고 생각한다. delete []는 free보다 안전합니다 ... 새로운/malloc 토론에서 delete와 delete의 구분을 지적 해 주실 가치가 있습니까? 메모리 할당의 두 가지 방법의 기술적 차이점과 마찬가지입니다. – Tommy