2010. 4. 2. 15:18

NULL 포인터에 대한 접근..


*((char *)NULL) = 'A';

보통 초급자분들이 코딩을 하다보면 NULL 포인터를 참조하여 접근하는 경우를 흔히 볼 수 있습니다.

실수도 실수지만 호기심으로 위와 같은 문법을 작성하고 실행시킨 후에 참조 에러가 나는 원인을 궁금해

하는 분들이 많았습니다.


char *temp = NULL;

NULL 포인터는 메모리의 어느곳도 가리키지 않는 포인터를 의미합니다.

NULL 포인터를 Debugging해보면 0x00000000를 가리킨다는 사실을 확인하실 수 있는데,

그렇다고 하여도 널 포인터는 어느곳도 가리키지 않는 포인터를 의미합니다.

어느곳도 가리키지 않는곳에 문자 상수 'A'를 대입하려고 했으니 문제가 발생하겠지요.

윈도우즈 운영체제에서 유저가 NULL 포인터 영역의 접근을 제한하고 있는 것이 보다 정확한

의미가 되겠습니다.

보통 NULL 포인터의 용도는 리소스 할당 실패를 검출하거나, 일종의 포인터 초기화, 

메모리 할당 실패 정도로 말씀드릴 수 있겠습니다.

ex1) if( NULL == fopen(..., ...) )

ex2) struct DATA *link;

        link->next = NULL;

ex3) char *string = (char *)malloc( sizeof(20) * char );

       if( string == NULL )
       {
            printf( "Memory allocation error" );
       }


Written By Sim-Hyeon, Choe