C에서 해제된 메모리에 대한 포인터
포인터를 삭제한 후 동일한 객체를 참조하는 다른 포인터의 유효성과 관련하여 혼란이 발생합니다. 이 문서의 목적은 C에서 이 동작을 명확히 하는 것입니다.
다음 코드를 고려하세요.
<code class="cpp">A* a = new A(); A* b = a; delete a; A* c = a; // Illegal (C++11) A* d = b; // Debatable legality // Points to deallocated memory, Undefined in C++11 A* aAddr = &a;</code>
C 11 동작:
C 14 동작:
C 11 표준에 따르면 잘못된 포인터 값을 사용하면(복사 포함) 정의되지 않은 동작이 발생합니다. C 14에서는 이러한 작업에 구현 정의 동작이 있습니다. 즉, 동작은 컴파일러와 운영 체제에 따라 다를 수 있습니다.
따라서 C 11과 C 14 모두에서 다음과 같은 포인터를 사용하지 않는 것이 중요합니다. 삭제되거나 할당 해제된 메모리를 참조합니다. 그렇게 하면 예측할 수 없고 잠재적으로 잘못된 동작이 발생할 수 있습니다.
위 내용은 C에서 포인터가 삭제된 후 동일한 객체를 참조하는 포인터는 어떻게 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!