>백엔드 개발 >C++ >C `new int[0]`가 빈 메모리를 할당할 수 있습니까? 그렇다면 어떤 의미가 있습니까?

C `new int[0]`가 빈 메모리를 할당할 수 있습니까? 그렇다면 어떤 의미가 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 13:07:10228검색

Can C   `new int[0]` Allocate Empty Memory, and If So, What Are the Implications?

궁금증 코너: C에서 빈 메모리 할당

C 프로그래밍 영역에서 흥미로운 질문이 제기됩니다. 새로운 int[0]으로 표현되는 빈 블록.

관찰 테스트 애플리케이션에서

새로운 int[0]의 결과를 인쇄하는 간단한 테스트 애플리케이션에서는 0x876c0b8의 출력이 나타나 메모리가 실제로 할당되고 있음을 나타냅니다.

표준 살펴보기

C 표준은 이에 대한 지침을 제공합니다. 문제:

  • Zero-Sized Arrays: 5.3.4/7에서는 표현식 값이 0인 direct-new-declarator가 표현식 값이 0인 배열에 할당된다고 명시합니다. 요소.
  • 정의되지 않은 역참조: 3.7.3.1/2 경고 크기가 0인 요청에 대해 반환된 포인터를 역참조하면 정의되지 않은 동작이 발생합니다.

추가 고려 사항

  • 크기가 0인 요청의 경우에도 할당이 실패할 수 있습니다.
  • 할당은 허용되지만 반환된 메모리 역참조는 법적으로 잘 정의되어 있지 않습니다. 플랫폼.
  • 할당된 메모리는 크기가 0이더라도 삭제해야 합니다.

Foot-Note Insights

흥미로운 발 -3.7.3.1/2의 참고는 malloc() 또는 calloc()을 사용하여 연산자 new() 구현을 활성화하려는 의도가 있음을 나타냅니다. 크기가 0인 요청과 관련하여 유사하게 동작합니다. 그러나 C는 null이 아닌 포인터를 반환하기 위해 크기가 0인 요청을 요구한다는 점에서 C와 다릅니다.

위 내용은 C `new int[0]`가 빈 메모리를 할당할 수 있습니까? 그렇다면 어떤 의미가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.