malloc()이후 해당 포인터의 free() 수행여부를 아는 방법은?
글쓴이: neohwang / 작성시간: 월, 2011/03/14 - 5:04오후
도움 좀 부탁드립니다.
----------------------------
등장인물 : S/V(서버), A, B
동작설명 :
- A가 S/V로 접속
- S/V에서 A에 대한 여러 정보를 malloc으로 생성한 구조체에 저장 후,
- B 에게 해당 구조체 포인터 값 전송
질문 : 위 상황에서 시간이 흐른 후,
B 가 해당 A포인터 값에 대한 정보를 S/V에 요청했을 때,
이게 현재 S/V에 존재하는지 안하는지(즉, free여부)를 알 수 있는 방법은?
-----------------------------
방법이 없을 듯 한데요.. 여러가지 편법을 생각했지만 솔루션을 못 찾았습니다.
Forums:
주소값을 hash entry 에 넣고 관리하시면 될거
주소값을 hash entry 에 넣고 관리하시면 될거 같은데요?
단순하게 alloc, free 여부를 관리하신다고 보시면됩니다.
예를 들어 A에서 Server로 접속하여 malloc 할 경우
첫번째 A의 접속
server에서 hEntry[0] = 주소'a
두번째 A의 접속
server에서 hEntry[1] = 주소'b
과 같이 관리하고.. free를 어느 시점에서 하시는지 모르겠지만, free할때는 hash entry 의 해당 bucket의 값을 초기화 시켜 놓으시면 될거 같은데요?
그래서 B에서 server로부터 받은 주소값을 키로 해서 hash entry 에 있는지 여부를 체크하시면 될거 같습니다.
...
한번 malloc해서 받은 주소를 free한 다음 다음번 요청이 왔을 때 malloc을 하면 예전과 똑같은 주소를 받을 수 있습니다.
당연한 건데.. 생각을 미쳐 못했군요.. -_-;;
당연한 건데.. 생각을 미쳐 못했군요.. -_-;;
우선 답변 감사드리며...
좋은 솔루션 좀 부탁드립니다.
일주일 넘게 고민하고 있습니다.
사실 포인터를 넘긴다는 것 자체가 정상적이진 않습니다만...
가장 효율적인것이 이 방법으로 판단이 되었습니다.
(네트웍 접속 세션이 너무 많으며, 끊김, 재접속 등을 고려한 정보의 유효성 검사 등등.. 말못한 사연..)
문제가 바로 포인터의 유효성인데요... ㅠㅠ
포인터를 별도로 관리하는 루틴 등등.. 여러가지 생각해 봤지만,, 탐색에 대한 부하 등등...에휴ㅠㅠ
좋은 편법 좀 없을까요?
포인터를 직접 넘기는 것은 아시다시피 안전한 방법이
포인터를 직접 넘기는 것은 아시다시피 안전한 방법이 아닙니다.
일단 중복유효성을 제어할 수 없으며 해당 포인터가 유효하지 않을때(delete)
검출 방법 및 delete를 잘못된 곳에서 할 경우 매우 찾기 힘든 버그를
만들어낼 수 있습니다.
핸들 개념을 도입하셔서 관리하시는 편이 안전하고 좋습니다.
탐색에 대한 부하를 걱정하시기 보다는 다른 곳에서 오래 걸리는 작업을
최적화 하시는걸 권장해드립니다.
컴퓨터.. 그렇게 느리지 않습니다. :)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기