|
강재호.만해 님이 쓰신 글 :
: 또아리 님이 쓰신 글 :
: : 작업관리자에 메모리 사용량이 계속 증가해서 리소스 부족 에러가 발생하는데...메모리 누수가 어디서 이루어 지는지 모르겠습니다...이리저리 포럼에서 뒤져서..memproof라는 자료실에 프로그램으로 검사해보라는데...어떻게 사용하나요? 몇시간째 코딩만 쳐다보고 있는데 ...잘 보이지 않네요... 해결을 못하고 있습니다. ㅡㅜ;
:
: 안녕하세요 만해입니다.
:
: 저도 이전에 겪었던일을 겪고 계시네요
:
: 그런데 전 아직도 겪고 있어서 ㅋ~
: 젤 먼저 살펴 봐야 할것은
:
: new랑 delete랑 숫자가 맞는지 그리고 쌍이 잘 이루어져 있는지 부터 확인 해보세요.
:
: 그 다음 방법은 new나 Delete 되는 부분에서 전부다 카운터를 시키는 방법입니다.
:
: 전역 변수 NewCount랑, DeleteCount 두가지변수를 만들어서
:
: new에 NewCount++ 시키고, delete에 DeleteCount 시켜서 프로그램이 종료된후에
:
: 두 카운터가 같은가 비교 하는 방법이 제일 무식히지만 좀 확실한 방법이고요,
:
: 좀더 좋은 방법은 CodeGuard옵션을 켜 놓고 빌더올 하신 다음에 종료 시켜 보세요
:
: 코드 가드가 new로 생성 했는데 안 지운것, Delete 했는데 또 지우는것들을 잡아내서 보여줍니다.
:
: 단 Full Debug로 컴파일 해야 합니다.
:
: 그외로는 혹시나 해서 적는데요
:
: TStringList* stl_list = new TStringList;
: for ( int i = 0 ; i < 100 ; i ++ )
: stl_list->Add("asdasd");
: delete stl_list; <- 여기서 누수 생깁니다.
: TStringList에서 Add를 하게 되면 일정 공간의 크기 이상의 데이타를 요구하게 되면
:
: 자동으로 메모리 재 할당이 일어 나게 되는데요
:
: delete시에는재 할당된 내용까지 잡아서 지우진 않습니다.
:
: 이걸 해결 하실려면
:
: TStringList* stl_list = new TStringList;
: for ( int i = 0 ; i < 100 ; i ++ )
: stl_list->Add("asdasd");
: stl_list->Clear(); <- 이렇게 명시적으로 Clear() 메소드를 호출해야 재할당된 부분까지 지워집니다.
: delete stl_list;
|