|
윤성민 님이 쓰신 글 :
: V6 님이 쓰신 글 :
: : 윤성민 님이 쓰신 글 :
: : : TActiveForm으로 만든 ocx를 MFC single Dailog로 import해서 썻는데요 ㅠㅠ
: : : Visual C++ 에서 짜꾸 메모리가 샌다고 나오거든요
: : : 그래서 생성자하고 소멸자를 맞추어 줄려구 그러는데요 도무지 모가 몬지 모르겠어요
: : : 제가 new나 malloc을 이용해서 클래스나 객체를 생성하지도 않았는데요 그저
: : : 빌더 깔면 꽁짜로 깔려있는 VCL 컨트롤만 이용했거든요
: : : 왜 메모리가 새는지 아시는분 계시면 제말 가르처주세요
: :
: : 빌더의 Project 메뉴의 Option에서 CodeGuard탭에 가셔서
: :
: : CodeGuard Validation을 체크하시고 컴파일 해보세요.
: :
: : 메모리 누수 다 잡아줍니다. Full debug로 해 놓고 하세요.
: :
: : 그리고 View 메뉴의 Debug Windows 밑에 있는 Codeguard Log 여시구요.
: :
: : 쓸만합니다.
:
: 답변 감사 합니다. 그런데 Codeguard Log에서는 아무것도 안나오고요
: Event log에서만 메모리가 샌다고 나오는 거 같해요
: 이벤트 로그 파일을 올릴께요 메모리가 새는 위치와 이유를 알고 싶거든요
: ㅠㅠ
Event log로는 왜 새는지 알 수 없습니다.
메모리 누수는 new로 잡아 것을 해제하지 않은 생기는 경우가 많습니다.
Codeguard Log 창에 아무것도 나오지 않는 것은 오류가 없거나
오류를 범하는 코드가 실행되지 않았다는 의미입니다.
예를 들어 보죠
New Application 을 만들고 버튼을 하나 올려놓고 OnClick 이벤트를 이렇게 작성합니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *cstr = new char;
}
그러고 Codeguard를 켜고 Codeguard Log창을 띄우고 실행해 보세요.
실행후 Button1을 한번만 클릭한 후 종료해 보세요.
CPU 창이 뜨면서 Codeguard Log 창에 기록이 될겁니다.
+ Resource leak 이라고 뜰겁니다.
+ 를 눌러서 하위 항목을 보면 + The object..어쩌구 저쩌구... created with new
고거 + 또 눌러보면 TForm1::Button1Click .... 이렇게 나옵니다.
그 항목을 더블클릭하면 소스편집창의 char *cstr = new char;로 이동됩니다.
직접해 보시면 아실겁니다.
그래서 님께서 작성하셨던 것에서 메모리를 해제해 주지 않은 것이 있다면
생성되는 부분이 먼저 실행되고 프로그램을 종료해야 Codeguard Log에 기록됩니다.
한번 해 보세요.
V6 였습니다. 즐프하세요.
|