-
반응형
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 함부로 쓰지 말아야 한다.
반응형