|
최성규 님이 쓰신 글 :
: 제목만으론 정확히 표현이 안되는 군요. 예제 코드를 적어 볼께요.
:
: typedef struct tagMyData {
: int a;
: int b;
: } TMyData;
: ...
: TList *MyList;
: ...
: // Data Add.. 이런 식으로 적당한 갯수 add 했다 합시다.
: TMyData *md = new TMyData;
: md->a = 10;
: md->b = 100;
: MyList->Add(md);
:
: // 하나의 데이터 삭제 (여기에 질문이 있습니다)
: // For a given index N (N은 당근 N >=0 && N < MyList->Count 임.)
: // OList->Items[N] 은 (void *) 이잖아요? 그래서,
: 1) TMyData *md = (TMyData *)OList->Items[N]; // 과 같이 md 로 casting된 pointer를 받고,
: 2) delete md; // delete 연산자로 OList->Items[N] 이 참조하는 메모리를 해제 시도.
: 3) OList->Delete(N); // OList 의 item 자체를 삭제
:
: 어떻습니까? 저는 나름대로 신경쓴다고, TList 의 한 Item이 참조하는 메모리를
: 먼저 날리고, 그 담에 TList의 item 자체를 삭제(Delete) 시도했던 것입니다.
: 이게 맞는 겁니까?
:
: 아니면, 3) OList->Delete(N); 만 해도 2) 에서 하고자 했던 참조된 메모리 해제까지
: 같이 하는 것입니까?
:
: 오래 전부터 애매하게 생각했던 부분인데, 이제야 질문을 올립니다.
:
제 잘못이네요.
제가 다른 코드 어디선가.. (TMyData *)OList->Items[N]을 받아서 한 번
delete 해 버렸어요. 크흐~~
당근 AccessViolation exception이 발생할 수 밖에...
※ 참, 저번에 저의 질문에 답해주신 '이경문'님. 감사드립니다. (__DATE__, __TIEM__)
|