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.color
是 GdkColor *
,初始化为 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_free
或 g_slice_free
会导致错误。这可以通过使用 G_SLICE=always-malloc 进行编译来验证,这将导致 g_slice_new
改为使用 malloc 调用并且损坏将消失。
我对 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.color
是 GdkColor *
,初始化为 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_free
或 g_slice_free
会导致错误。这可以通过使用 G_SLICE=always-malloc 进行编译来验证,这将导致 g_slice_new
改为使用 malloc 调用并且损坏将消失。