C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[14238] Re:허접질문.. 리소스 절약하려고 하는데요...
gongnim [gongnim] 1098 읽음    2002-01-08 15:52
안녕하세요 gongnim입니다.
님께서는 포인터에 대해서 좀더 공부를 하셔야할 것 같다는 생각이 듭니다.
우선 제가 아래의 예제를 보면서 설명을 드리겠습니다.

void __fastcall LoadRes(TImage *ImgName, AnsiString ResID)
{
    TJPEGImage *Myjpg = new TJPEGImage;
    TResourceStream *RStream = new TResourceStream((int)HInstance, ResID, RT_RCDATA);
    Myjpg->LoadFromStream(RStream);
    ImgName->Picture->Assign(Myjpg);
    RStream->Free();
    RStream = NULL;
    Myjpg->Free();
}

위의 LoadRes함수는 님처럼 저도 리소스를 절약하기 위해서 그림을 그냥 컴포넌트에 넣는것이 아니라 JPEG형식의 그림을 리소스에 담아서 TImage 컴포넌트에 그림을 동적으로 출력시키는 함수입니다.
위에서 첫번째 라인에서
  TJPEGImage *Myjpg = new TJPEGImage;
이렇게 TJPEGImage 를 상속받는 Myjpg라는 포인트 변수를 생성했습니다.
그렇다면 그 중간에 일들은 그림을 리소스에서 로드하고 그것을 TImage 컴포넌트에 넣는 작업이겠죠?
그리고 님께서 원하시는 답변인 처음 생성한 포인트 변수인 Myjpg을 Free를 시켜줍니다.
왜 이것을 시켜주는가하면 만약에 이것을 free 시켜주지 않으면 메모리가 계속 쌓여서 언젠가는 뻑!!! 윈도우가
발작을 하겠죠? 그렇지 않더라도, 다른 작업을 할때 이 포인터를 참조할 수 있는 여지가 생기는 것입니다.
따라서 free를 시켜줘서 잡았던 메모리들을 해제 시켜주는 것입니다.

그리고, List index out of bounds 에 대한 에러는 예를 들면 List->Items->Count 가 0이라고 합시다.
그런데 프로그램 어디선가 List->Delete(인덱스) -->이렇게 하는게 맞나? ^^;; 이렇게 해버리면, 있지도 않은
List의 Item을 지우려고 시도합니다. 그렇게 돼면 그런 에러가 발생하게 돼죠.
또, EAccess Violation은 이것은 어디선가 메모리의 충돌이라던지 포인터를 잘못 참조했을 경우 자주 발생한답니다. 이것은 문법적인 오류보다는 코드 어디선가 잘못된 주소를 참조할 때 발생합니다. 조금 찾기가 어렵죠.
그럼 참고하시길.....

           --- Change World ---


심심 님이 쓰신 글 :
: 안녕하세요 제글에 관심가져 주셔서 감사드립니다.
: 제가요.. 얼마간 고생하여 미디어 플레이어와 몇개의 이미지,비트맵,리스트 등을 사용하는 프로그램 비슷한걸 하나 만들었느데요... 이걸 돌리다보니 잘돌아가다가 몇번 재생하면 에러가 나며 멈춤니다... 보니.. 몇가지 콘트롤들이 소멸이 안되거나 아님 없는 값을 참조하려 한다는 결론이 나왔어요.... 근데.. 다른님들의 소스를 보니 delete란 키워드를 사용하고 있더군요.. 그래서 저도 그걸 사용해 보았습니다. 근데 제가 알고 있는 사용법은 그냥 new로 생성된 객체를 지운다 ... 이정도 밖에는 몰라요... 궁굼한것은요... 코딩시 리소스의 관리를 위해서 제가 해야 할일과요... 또 꼭 소멸시켜야하는 객체.. 너무 내용이 만타면 위에 제가 만들었던 프로그램을 위주로.. 그리고 제가 사용한 delete 키워드의 사용 법이 정확히 어찌 되는지 등이 궁굼합니다. 고수님들의 따뜻한 조언 부탁드립니다.... 답변 미리 감사드리고요... 추운데 감기 조심하세요.... 그럼이만 꾸벅 (__)
:
: %% 참!! 혹시요.. 아래 에러가 구체적으로 어떤 에러 인지요...
: List index out of bounds -> 이건 제가 아는건 리스트의 범위를 초과했다고 하는거 같은데... --;;
: ......EAccess Violation...... -> 이건 책엔 NULL 값을 참조할때 이런 에러가 나온다던데...

+ -

관련 글 리스트
14233 허접질문.. 리소스 절약하려고 하는데요... 심심 740 2002/01/08
14238     Re:허접질문.. 리소스 절약하려고 하는데요... gongnim 1098 2002/01/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.