|
HUMANLSH 님이 쓰신 글 :
: 다음과 같이 간단한 코딩작업을 했습니다.
: IMAGEPACKET은 struct로 선언이 되어 있습니다.
:
: public:
:
: TList* RecvList;
:
: IMAGEPACKET* iPacket = new IMAGEPACKET;
: iPacket->Pid = PID_IMG_FRAME_SEND;
:
: switch(iPacket->Pid){
: case PID_IMG_FRAME_SEND :
: RecvList->Add(iPacket);
: delete iPacket;
: break;
: default :
: break;
: }
:
:
: 위와 같은 코드가 진행됐을때 delete iPacket할때
: Add한 RecvList의 내용이 삭제됩니다.
: 코드가 틀려 있나요? list내용이 그대로 있으면서 iPacket을 메모리에서
: 지울 수 다음과 같이 간단한 코딩작업을 했습니다.
: IMAGEPACKET은 struct로 선언이 되어 있습니다.
:
: public:
:
: TList* RecvList;
:
:
: IMAGEPACKET* iPacket = new IMAGEPACKET;
: iPacket->Pid = PID_IMG_FRAME_SEND;
:
: switch(iPacket->Pid){
: case PID_IMG_FRAME_SEND :
: RecvList->Add(iPacket);
: delete iPacket;
: break;
: default :
: break;
: }
:
:
: 위와 같은 코드가 진행됐을때 delete iPacket할때
: Add한 RecvList의 내용이 삭제됩니다.
: 코드가 틀려 있나요? list내용이 그대로 있으면서 iPacket을 메모리에서
: 지울 수 있는 방법을 알려주세요..
: 부탁드립니다.
TList에 Add되는 것은 포인터입니다.
포인터는 메모리 상의 번지일뿐, 포인터 자체에는 위의 구조체 내부의 정보들을 가지고 있지 않습니다.
따라서, 포인터가 가리키고 있는 메모리를 free하면 해당 포인터가 가리키는 번지에는 더이상 원하는 정보가 유지되지 않는다고 봐야합니다.
결국, TList로는 님이 원하는 대로 할 수 없습니다.
std의 list를 사용하면 가능합니다.
즉, list에 포인터가 아닌 값으로 저장하면 됩니다.
list<IMAGEPACKET>의 형으로 컨테이너를 하나 만들어 그 곳에 넣으면 됩니다.
|