JC Tailor

블로그 이미지
컴퓨터를 사랑하자.~
dkcjs3

Article Category

분류 전체보기 (52)
프로그램방법론 (0)
Tailor 이야기 (0)
C언어 이야기 (49)
C++ 이야기 (1)
API 이야기 (0)
MFC 이야기 (0)
Window XP 이야기 (0)
컴퓨터정보 (1)
나의 삶 이야기 (1)
UNIX (0)

Recent Comment

Recent Trackback

Calendar

«   2017/08   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Archive

  • Total24,765
  • Today0
  • Yesterday3
void와 void*(포인트)
void와 void*(포인트)

1. void

   주1)에서와 같이 void는 비어있다 아무것도 없다는 뜻을 가지는 단어이다. void가 단독으로 사용되는 경우에는 사전적인 의미에서와 같이 "아무것도 없다"로 사용된다.

   - 함수의 인자로 사용

      예1)  함수 선언 : int GetValue( void );

     즉, 입력되는 것이 없다.     

  - 함수의 리턴값으로 사용

      예2) 함수 선언 : void SetValue( int nValue );

     즉, 리턴되는 값이 없다. 비주얼 베이직에서  Sub와 동일하다.


2. void*(포인트)

  void*는 void와 다른 의미를 가진다. void*는 "어떤것이라도 가르킬 수 있다"로 사용된다.

   예3)

       float fValue = 0.0f;

       short nValue = 0;

       short* pnValue = &nValue; // short형 포인트

       float* pfValue = &fValue; // float형 포인트

      void* pValue = ( void* ) &nValue; // short형 포인트(주소)를 void*포인트에 할당

      pValue = ( void* ) &fValue; // float형 포인트(주소)를 void*포인트에 할당

     pfValue = ( float* ) pValue; // pValue는 float형 포인트를 가르키고 있기 때문에 문제가 없다.

     pnValue = ( short* ) pValue; // 컴파일 오류(경고 포함)는 생기지 않지만, 포인트(pValue)가 가르키는 데이타형이 틀리기 때문에 심각한 문제가 발생할 수 있다.

  예3)에서와 같이 void*는 무엇이든 할당할 수 있다. 컴파일러에 따라 틀리지만, 형변환은 반드시 해야 한다.      


3. void*는 무엇이든 할당할 수 있다는 점이 강력한 장점이지만, 심각한 문제를 발생시키는 원인

    예4)

     short nValue[ 10 ];

     float* pfValue = NULL;

     void* pValue = NULL;

     pValue = &nValue;

     pfValue = ( float* ) pValue;

 예4)에서와 같이 pValue를 강제로  pfValue에 할당을 할 경우에 심각한 문제가 생길 수 있다.

시스템 혹은 운영체제에 따라 틀리지만, short는 2바이트, float는 4바이트의 데이타형이다. 위와 같이  pfValue를 사용하게 되면, pfValue[ 5 ]부터 short nValue[ 10 ]에 할당된 메모리 영역을 벗어 나게 된다. 벗어난 메모리 영역에 값을 쓰게 되면 어떤 현상이 생길지는 아무도 모른다. 아무도 모른다는것이 가장 큰 문제이다. 특히, 벗어난 영역이 다른 값을 침범하게 된다면, pfValue를 사용하지 않는 멀쩡한 코드에서 갑자기 오류가 생겨 디버깅이 힘들어지는 경우도 생긴다. 물론, 예4)에서와 같이 할당하는 프로그래머는 없겠지만, 유사한 형태는 나올 수 있다.


주1) void 뜻 : http://endic.naver.com/endic.nhn?docid=1254810

신고
Trackback 0 and Comment 0
prev Prev : [1] : [2] : [3] : [4] : [5] : [6] : [7] : [8] : [9] : [10] : [···] : [52] : Next next

Tag Cloud


티스토리 툴바