2011-08-19 1 views
2

내 코드에 GHashTable을 사용하려고합니다. 나는 내 키로 int을 사용하고 구조는 내 가치로 사용합니다. 내 질문은 :GLib에서 GHashTable 사용?

  • 나는 키로서 사용하고있는 int에 대한 메모리를 할당해야합니까, 또는 그냥 삽입 및 검색의 기능에 로컬 변수를 사용할 수 있습니까?
  • g_int_to_pointer의 기능은 무엇입니까?
  • GDestroyFunction을 쓰고 있는데 메모리를 비워야합니까?

답변

2

는 내가 키로서 사용하고있는 인터넷 용 메모리를 할당해야합니까, 또는 그냥 삽입 및 검색의 기능에 로컬 변수를 사용할 수 있습니까?

아니요 값으로 정수를 전달할 수 없으므로 힙에 malloc() 등과 같이 할당 할 필요가 없습니다.

g_int_to_pointer의 기능은 무엇입니까?

죄송합니다.

GDestroyFunction을 쓰고 있다면 메모리를 비워야합니까?

GDestroyNotify을 찾으셨습니까? 문서 설명 :

데이터 요소가 소멸 될 때 호출되는 함수 유형을 지정합니다. 포인터를 데이터 요소에 전달하고 할당 된 메모리 및 리소스를 해제해야합니다.

예, 할당 된 메모리를 확보해야합니다.

3

GINT_TO_POINTER (대문자를 염두에 두면서)은 32 비트 또는 128 비트 일 수있는 포인터 공간에 32 비트 int을 압축합니다. 이 매크로를 사용하여 int을 신호의 user_data 매개 변수로 전달할 수 있으며 예를 들어 메모리 할당을 피할 수 있습니다. 그런 다음 신호 처리기에서 GPOINTER_TO_INT을 사용하여 int를 가져옵니다. 포인터를 역 참조하려고하지 마라!

+0

답장을 보내 주셔서 감사합니다. 'GHashTable'을 사용하면서 int를'key '로 사용하려고 생각했습니다. 'G_INT_TO_POINTER'를 사용하여 이것을 포인터로 변환하여 [link] (http://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table)에서 사용할 수 있습니다. -끼워 넣다). 테이블에서 검색 할 때, 같은'G_INT_TO_POINTER' 매크로를 사용하여 int를 필요한 포인터로 변환 할 수 있습니까? 그들은 둘 다 같은 참조가 될 것입니까? – jogabonito

+0

@ jogabonito : 예. – ptomato

+0

"GPOINTER_TO_INT"를 사용하여 원래의 int 값을 반환 할 필요가 없습니다. BTW, 나는 오타를 수정하려고했다. (당신은 G 이후에 '_'가 필요 없다.) 그러나 그 편집은 너무 짧다고 불평했다. –