ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • memset 그리고 class
    2011. 6. 2. comments

    memset은 메모리의 값을 초기화 하는 함수이다.
    man 페이지를 보면  설명이 나온다.

    MEMSET(3)                BSD Library Functions Manual                MEMSET(3)
    NAME
         memset -- fill a byte string with a byte value
    LIBRARY
         Standard C Library (libc, -lc)
    SYNOPSIS
         #include 
         void *     memset(void *b, int c, size_t len);
    DESCRIPTION
         The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b.
    RETURN VALUES
         The memset() function returns its first argument
    
    

             시스템 함수에 대해서 man 페이지는 필수! !


    코딩 작업을 하다가 객체에 memset을 한후 해당 객체 멤버변수에 값을 할당하니  segfault가 발생하였다.
    모든 객체에서 sefault가 발생하진 않는다. 아래의 예시를 보면,

     
    struct WorldData
    {
      std::string  _name;
      Realworld  _world;
    }
    
    int main()
    {
      struct WorldData _data;
      memset( &_data,  0x00, sizeof(_data));
    }
    
    
    

    _name과 _world를 초기화하려고 memset하는 순간 std::string에서 내부적으로 사용하는 내용들까지 전부 0으로 초기화 해버려서 segfault 발생한걸로 추정된다.

    요즘 소켓쪽 공부한다고 자주 memset 함수를 사용하니,  초기화할 대상을 확인도 안하고 습관적으로 사용하여 나타난 결과다.

    어떻게 보면 당연한 이야기지만 객체에 한하여 memset 함부로 쓰지 말아야 한다.



    반응형

    댓글

Designed by Tistory.