"new int[0]"는 메모리를 할당 하나요?

조회수 3610회

제 컴퓨터에서 cout << new int[0] << endl; 를 실행하니 0x876c0b8를 출력했습니다.

이걸 봐서는 메모리가 할당되는 것 같은데 [0]을 할당한다는 건 empty를 할당한다는 거잖아요. 개인적으로는 에러가 날거라 생각했는데, 의외로 메모리가 할당되네요. 이건 모든 컴파일러에서도 적용되는 건가요? C++ 표준인가요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    C++ 표준

    5.3.4/7에 따르면

    new int[0]과 같이 할당할 경우, 원소가 없는 배열을 할당해주고,

    3.7.3.1/2에 따르면,

    이런 포인터의 경우에는 포인터가 가리키는 대상의 크기는 정해지지 않았고, 때로는 new int[0]같은 요청은 fail할 수도 있습니다

    따라서 new int[0]같이 쓸 때의 결과는 플랫폼에 따라서 다릅니다.

    C에 비슷한게 있나 해서 찾아봤는데 C++의 new 연산은 C의 malloc()이나 calloc()과 비슷하지만, 0을 할당할 때 만큼은 그 결과가 달라 C의 표준에서도 정해진 바가 없습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)