방구석 컴퓨터/C,C++

포인터의 위험성💀

CCEO 2021. 1. 14. 12:38
반응형
더보기

C 프로그래밍을 할 때 포인터가 실제로 어떤 대상을 가리키고 있지 않을 때

값을 전부 NULL로 설정하는 것이 바람직 하다.

위와 같이 설정함으로써 프로그램 밖이나 합당하지 않은 메모리 영역을 참조할 가능성이 적어진다.


덧붙여서 또 다른 유용한 프로그래밍 기법은 포인터 타입 간의 변환을 할 때 명시적인 타입 변환(type cast)을 하는 것이다.

예를 들면 아래와 같다.

pi = malloc(sizeof(int));   //pi에 정수에 대한 포인터를 저장
pf = (float*)pi;   //정수에 대한 포인터를 부동소수에 대한 포인터로 변환

많은 시스템에서 포인터의 크기는 int 타입의 크기와 같다. 또 int는 디폴트 타입 명세자이므로, 어떤 프로그래머들은 함수를 정의할 때 반환 값의 타입을 생략하기도 한다.

이렇게 되면 반환 값의 타입은 자동으로 int 타입이 되며, 이것은 나중에 포인터로 해석될 수 있다. 이것은 컴퓨터에 따라 매우 위험하다는 것이 증명되었기 때문에 프로그램을 작성할 때는 함수에 대한 반환 값의 타입을 명확히 정의하도록 해야 한다.

반응형