> 백엔드 개발 > C++ > C가 빈 배열을 할당할 수 있습니까? 그렇다면 사용해도 안전한가요?

C가 빈 배열을 할당할 수 있습니까? 그렇다면 사용해도 안전한가요?

Mary-Kate Olsen
풀어 주다: 2024-12-31 02:33:10
원래의
631명이 탐색했습니다.

Can C   Allocate an Empty Array, and If So, Is It Safe to Use?

C의 메모리 할당: 빈 배열을 할당할 수 있습니까?

C에서는 다음을 사용하여 배열에 대한 메모리 할당을 동적으로 수행할 수 있습니다. 새로운 운영자. 그런데 크기가 0인 배열을 할당하면 어떻게 될까요?

cout << new int[0] << endl;
로그인 후 복사

이렇게 하면 빈 블록에 메모리가 할당되나요? 표준의 관점을 살펴보겠습니다.

표준 해석

C 표준(5.3.4/7)에 따르면 "직접- new-declarator가 0인 경우, 할당 함수가 호출되어 새로운 선언자가 없는 배열을 할당합니다. elements."

역참조 문제

그러나 표준(3.7.3.1/2)에서는 "0에 대한 요청으로 반환된 포인터를 역참조하는 효과"라고 ​​명시적으로 명시하고 있습니다. 크기는 정의되지 않았습니다." 즉, 빈 배열을 할당하는 것은 기술적으로 가능하지만 해당 요소에 액세스하려는 시도(예: 반환된 포인터 역참조)는 정의되지 않은 동작입니다.

추가 참고 사항

표준에서는 빈 배열 할당을 허용하더라도 크기가 0인 메모리에 대한 요청은 여전히 ​​실패할 수 있음을 강조합니다. 이는 동적 메모리 할당이 해당 요청을 자체적으로 처리할 수 있는 외부 시스템 라이브러리(예: malloc())에 의존할 수 있기 때문입니다.

의미 및 모범 사례

실제로는 빈 배열을 할당하지 않는 것이 일반적으로 좋은 방법으로 간주됩니다. 동작은 정의되지 않았으며 다양한 플랫폼과 환경에서 예상치 못한 결과가 발생할 수 있습니다. 빈 컨테이너가 필요한 시나리오를 처리해야 하는 경우 크기가 0인 std::Vector 또는 std::array를 사용하는 등의 대체 접근 방식을 사용하는 것이 좋습니다.

위 내용은 C가 빈 배열을 할당할 수 있습니까? 그렇다면 사용해도 안전한가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿