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


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

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

  • 2016년 01월 24일에 작성됨

조회수 338


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의 표준에서도 정해진 바가 없습니다.

  • 2016년 01월 24일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close