delete 잘 해주었는데... 어느순간에 에러가 나신다는건
캡춰하는 루틴에 문제가 없다고 봐도 될것 같습니다.
코드가드도 한번 돌려보시고요..,.
아래 함수로 메모리가 잘 반환되는지 중간중간 체크도 한번 해 보시기 바랍니다.
AnsiString get_free_mem()
{
MEMORYSTATUS memoryStatus;
ZeroMemory(&memoryStatus,sizeof(MEMORYSTATUS));
memoryStatus.dwLength = sizeof (MEMORYSTATUS);
::GlobalMemoryStatus (&memoryStatus);
AnsiString Temp;
Temp=FormatFloat("#0,",(DWORD)(memoryStatus.dwAvailVirtual));
return Temp;
}
막장까지 가서는 아래와 같은 무식한 방법도 있습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=53822
로그파일에 메모리 상태를 추가해야 되겠네요.?
플그래머 님이 쓰신 글 :
: 해주고 있습니다... 그런데도 반복적으로 화면 캡쳐하는 코드가 호출되면... 어느순간에 에러가 나네요...
:
: 방태윤 님이 쓰신 글 :
: : delete Capture1;
: : delete JPEGIMAGE1;
: :
: : 해 주었느지 확인해보세요,
: :
: : 당연이 해 주었을거라 생각되지만...
: :
: : 어쨋던 new Graphics::TBitmap; 나 new TJPEGImage(); 할때 메모리가 부족해서 나오는 현상 같으므로
: :
: : 메모리가 제대로 해제되는지 그 쪽으로 점검해 보세요,(꼭 요 함수가 아니더라도)
: :
: :
: :
: : 쉽지않네요 님이 쓰신 글 :
: : : 주기적으로 화면을 캡쳐하는데... 저장소가 부족합니다. 이런에러가 나네요...
: : : 어떻게 해결방법이 없나요.
: : :
: : : Capture1 = new Graphics::TBitmap;
: : : JPEGIMAGE1 = new TJPEGImage();
: : :
: : : Capture1->Width = 1280;
: : : Capture1->Height = 1024;
: : :
: : : BitBlt(Capture1->Canvas->Handle, 0, 0, 1280, 1024, DC1, 0, 0, SRCCOPY);
: : :
: : : JPEGIMAGE->Assign(Capture1);
: : : JPEGIMAGE->CompressionQuality = 100;
: : :
: : : JPEGIMAGE->SaveToFile(Name);
: : :
: : : 위 소스는 여기 볼랜드 포럼에서 구한것입니다.