'STL'에 해당되는 글 1건
- 2010.04.20 ZeroMemory또는 memset시 유의사항
보통 데이터를 갖는 구조체들은 구조체에 값을 채우기전에 초기화작업을 많이 하고들 합니다. 보통 아래와 같은 구문을 주로 쓰는 편인데..
memset( &data, 0, sizeof( data ) );
또는
ZeroMemory( &data, sizeof( data ) );
또는
ZeroMemory( &data, sizeof( data ) );
하지만, 구조체에 STL이 포함되어있는 경우는 각별한 주의를 요합니다. 이를 테면..
struct Data
{
string str;
vector<int> nums;
};
{
string str;
vector<int> nums;
};
실행중에는 별다른 이상이 없어보이지만, 디버깅을 하면, 메모리누수가 나는 것을 볼 수 있습니다.
많은 경우를 모두 테스트 해보지 않았지만, vector의 경우는 별다른 이상이 없었지만.. string의 경우는 메모리 누수가 발생합니다. str변수를 new를 통해 생성하지 않았음에도 말이죠. 사실 내부적으로도 동적 할당되구요. 차례대로 따라가다보시면 더 확실히 알 수 있습니다.
어쨌든 별생각없이 ZeroMemory한 결과였고, 실행중에 정상적으로 나오기 때문에 별다른 걸 못느꼈지만, 디버깅을 해보니 누수되었다고 나오더군요.
결론은 STL변수의 저장공간을 절대 0으로 초기화하지 말아야 합니다. 당연한 얘기일수도 있으나, 의외로 실수가 잦으니 항상 숙지하시기 바랍니다.
'C/C++ > 에러도우미' 카테고리의 다른 글
기본 클래스를 정의하지 않았습니다. (0) | 2010.06.15 |
---|---|
교차 포함 시 대량의 오류가 발생하는 경우 (3) | 2010.06.13 |
증가연산자 혹은 증감연산자 사용시 주의사항 (0) | 2010.04.26 |
소스 파일이 모듈을 빌드했을 때와 다릅니다. 현재 위치에 사용할 수 있는 소스 코드가 없습니다. (1) | 2010.04.23 |
메모리릭 검출 중에 황당한 오류를 접한 경우 (0) | 2010.04.21 |