使用 GLib 中的 GHashTable?

发布于 2024-11-30 13:30:11 字数 364 浏览 0 评论 0原文

我正在尝试使用 GHashTable 在我的代码中。我将使用 int 作为我的键,使用结构体作为我的值。我的问题:

  • 我是否必须为用作键的 int 分配内存,或者我可以在插入和查找函数中使用局部变量吗?
  • g_int_to_pointer 是做什么的?
  • 如果我正在编写 GDestroyFunction,我是否必须释放任何内存?

I am trying to use a GHashTable in my code. I will be using an int as my key and a structure as my value. My questions:

  • Will I have to allocate memory for the int I am using as a key, or can I just use a local variable in the functions for insert and lookup?
  • What does g_int_to_pointer do?
  • If I am writing a GDestroyFunction, will I have to free any memory?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南城旧梦 2024-12-07 13:30:11

GINT_TO_POINTER(注意大写字母)将 32 位 int 打包到指针的空间中,该指针可以是 32 位或 64 位。例如,您可以使用此宏将 int 作为信号的 user_data 参数传递,同时避免为它们分配内存。然后在信号处理程序中,使用 GPOINTER_TO_INT 取回 int。不要尝试取消引用指针!

GINT_TO_POINTER (mind the capital letters) packs a 32-bit int into the space of a pointer, which may be 32 or 64-bit. You can use this macro to pass ints as the user_data parameter of a signal, while avoiding allocating memory for them, for example. Then in the signal handler, use GPOINTER_TO_INT to get your int back. Don't try to dereference the pointer!

生生漫 2024-12-07 13:30:11

我是否必须为用作键的 int 分配内存,或者我可以在插入和查找函数中使用局部变量吗?

不,您可以按值传递整数,不需要使用 malloc() 等在堆上分配它。

g_int_to_pointer 的作用是什么?

抱歉,我不认识那个人。

如果我正在编写 GDestroyFunction,我是否必须释放任何内存?

您是指 GDestroyNotify 吗?正如文档所述:

指定销毁数据元素时调用的函数类型。它被传递到数据元素的指针,并且应该释放为其分配的任何内存和资源。

是的,您确实必须释放分配的内存。

Will I have to allocate memory for the int I am using as a key, or can I just use a local variable in the functions for insert and lookup?

No you can pass the integer by value, you do not need to allocate it on the heap with malloc() or the like.

What does g_int_to_pointer do?

Sorry, I don't know that one.

If I am writing a GDestroyFunction, will I have to free any memory?

Did you mean GDestroyNotify? As the documentation states:

Specifies the type of function which is called when a data element is destroyed. It is passed the pointer to the data element and should free any memory and resources allocated for it.

Yes, you do have to free the allocated memory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文