gdk_color_copy 真的分配内存吗?

Does gdk_color_copy really allocate memory?

我对 gdk docs 的印象是 gdk_color_copy 分配内存:

Makes a copy of a color structure. The result must be freed using gdk_color_free().

未来版本 gdk_rgba_copy 显然:

A newly allocated GdkRGBA, with the same contents as rgba

尽管如此,我在代码中遇到以下内存错误(my_struct.colorGdkColor *,初始化为 NULL):

if (my_struct.color != NULL) {
    gdk_color_free(my_struct.color);
}   
my_struct.color = gdk_color_copy(color);

以下似乎有效:

if (my_struct.color == NULL) {
    my_struct.color = malloc(sizeof(GdkColor));
}   
memcpy(my_struct.color, color, sizeof(GdkColor));

gdk_color_copy 使用 g_slice_new 分配内存,如 source.

中所示

使用 g_free 而不是 gdk_color_freeg_slice_free 会导致错误。这可以通过使用 G_SLICE=always-malloc 进行编译来验证,这将导致 g_slice_new 改为使用 malloc 调用并且损坏将消失。