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 중국어 웹사이트의 기타 관련 기사를 참조하세요!