C++ Pointers and Memory – Free Coding Tutorials


포인터의 사용법의 구문과 의미는 C 표준 문서(http://bit.ly/173cDxJ)에 매우 자세히 설명되어 있다. 그러나 표준 문서가 포인터의 동작을 명확히 정의하지 못하는 경우가 있다. 이러 떄 표준 문서는 포인터의 동작을 다음과 같이 정의한다.


- 구현 방법에 따라 정의된 행동(Implementation-defined behavior)

 동작에 대한 문서화된 구현을 제공한다. 구현 방법에 따라 정의된 행동의 예로, 정수에 대한 오른쪽 시피트 연산에서 상위 비트의 확장 방법이 있다.


- 명시되지 않은 행동(Unspecified behavior)

 동작에 대한 구현을 제공하지만 문서화하지 않는다. malloc함수에 인자로 0을 주고, 실핼할 때 메모리가 얼마나 할당되는가 하는 것이 명시되지 않은 행동의 예가 될 수 있다. 명시되지 않은 행동의 목록을 CERT Secure Coding Appendix DD에서 볼 수 있다.


- 정의되지 않은 행동(Undefined behavior)

 포인터의 동작에 대해 어떠한 것도 강요하지 않으므로 어떠한 동작도 발생할 수 있다. 이 경우의 예로, free 함수에 의해 해제된 포인터의 값이 있다. (C 표준은 해제된 포인터에 어떤 값이 들어 있는지 정의하지 않는다.) 정의되지 않은 행동의 목록은 CERT Secure Coding Appendix CC(http://bit.ly/16msOVK)에서 찾을 수 있다.

+ Recent posts