"new int[0]"는 메모리를 할당 하나요?
조회수 3561회
제 컴퓨터에서
cout << new int[0] << endl;
를 실행하니 0x876c0b8
를 출력했습니다.
이걸 봐서는 메모리가 할당되는 것 같은데
[0]
을 할당한다는 건 empty
를 할당한다는 거잖아요. 개인적으로는 에러가 날거라 생각했는데, 의외로 메모리가 할당되네요.
이건 모든 컴파일러에서도 적용되는 건가요? C++ 표준인가요?
1 답변
-
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의 표준에서도 정해진 바가 없습니다.
댓글 입력