malloc()이후 해당 포인터의 free() 수행여부를 아는 방법은?

neohwang의 이미지

도움 좀 부탁드립니다.

----------------------------

등장인물 : S/V(서버), A, B

동작설명 :
- A가 S/V로 접속
- S/V에서 A에 대한 여러 정보를 malloc으로 생성한 구조체에 저장 후,
- B 에게 해당 구조체 포인터 값 전송

질문 : 위 상황에서 시간이 흐른 후,
B 가 해당 A포인터 값에 대한 정보를 S/V에 요청했을 때,
이게 현재 S/V에 존재하는지 안하는지(즉, free여부)를 알 수 있는 방법은?

-----------------------------

방법이 없을 듯 한데요.. 여러가지 편법을 생각했지만 솔루션을 못 찾았습니다.

mirr187의 이미지

주소값을 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 에 있는지 여부를 체크하시면 될거 같습니다.

jick의 이미지

한번 malloc해서 받은 주소를 free한 다음 다음번 요청이 왔을 때 malloc을 하면 예전과 똑같은 주소를 받을 수 있습니다.

mirr187의 이미지

당연한 건데.. 생각을 미쳐 못했군요.. -_-;;

neohwang의 이미지

좋은 솔루션 좀 부탁드립니다.
일주일 넘게 고민하고 있습니다.

사실 포인터를 넘긴다는 것 자체가 정상적이진 않습니다만...
가장 효율적인것이 이 방법으로 판단이 되었습니다.
(네트웍 접속 세션이 너무 많으며, 끊김, 재접속 등을 고려한 정보의 유효성 검사 등등.. 말못한 사연..)
문제가 바로 포인터의 유효성인데요... ㅠㅠ

포인터를 별도로 관리하는 루틴 등등.. 여러가지 생각해 봤지만,, 탐색에 대한 부하 등등...에휴ㅠㅠ
좋은 편법 좀 없을까요?

chadr의 이미지

포인터를 직접 넘기는 것은 아시다시피 안전한 방법이 아닙니다.
일단 중복유효성을 제어할 수 없으며 해당 포인터가 유효하지 않을때(delete)
검출 방법 및 delete를 잘못된 곳에서 할 경우 매우 찾기 힘든 버그를
만들어낼 수 있습니다.

핸들 개념을 도입하셔서 관리하시는 편이 안전하고 좋습니다.

탐색에 대한 부하를 걱정하시기 보다는 다른 곳에서 오래 걸리는 작업을
최적화 하시는걸 권장해드립니다.

컴퓨터.. 그렇게 느리지 않습니다. :)

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.