>백엔드 개발 >C++ >C에서 포인터가 가리키는 메모리를 삭제한 후 포인터는 어떻게 되나요?

C에서 포인터가 가리키는 메모리를 삭제한 후 포인터는 어떻게 되나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 01:48:021081검색

What Happens to Pointers After Deleting the Memory They Point To in C  ?

삭제 후 C의 포인터 동작

C에서 포인터를 삭제하면 포인터가 가리키는 메모리가 할당 해제됩니다. 그러나 삭제된 메모리를 가리키는 포인터의 동작은 C 버전에 따라 정의되지 않거나 구현에 따라 정의됩니다.

다음 코드를 고려하세요.

<code class="cpp">A* a = new A();
A* b = a;

delete a;

A* c = a; // Assuming undefined or implementation-defined in C++11
A* d = b; // Supposed to be legal</code>

값 읽기 삭제된 포인터 복사본(b)

C 11에서 a가 삭제된 후 b의 값을 읽는 것은 정의되지 않은 동작입니다. 그러나 C 14에서는 구현에 따라 정의됩니다. a가 삭제된 후 포인터 b 자체가 "잘못된 포인터 값"이 되기 때문입니다.

구현 정의 동작

C 14에서는 잘못된 포인터 값 사용 복사를 포함하여 구현에 따라 정의된 동작이 있습니다. 이는 컴파일러가 그러한 경우에 무엇을 할지 결정할 수 있음을 의미합니다. 일부 구현에서는 런타임 오류가 발생할 수 있는 반면, 다른 구현에서는 작업을 허용하지만 이후에 포인터를 사용할 때 정의되지 않은 동작이 발생할 수 있습니다.

합법적입니까 아니면 정의되지 않습니까?

그러므로 A* c = a; 그리고 A* d = b; C 11에서는 정의되지 않았고 C 14에서는 구현에 의해 정의되었습니다. 복사된 포인터 값(b)은 잘못된 포인터 값으로 간주되며 해당 사용은 구현 정의에 따릅니다.

위 내용은 C에서 포인터가 가리키는 메모리를 삭제한 후 포인터는 어떻게 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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