gpt4 book ai didi

c - 两次释放 glib 缓冲区是否安全?

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:12 27 4
gpt4 key购买 nike

释放两次由 glib g_malloc 函数分配的缓冲区是安全的还是禁止的?

char *buffer = g_malloc(10);
g_free(buffer);
g_free(buffer);

最佳答案

来自 glib/gmem.c (假设您没有对某些花哨的东西执行 g_mem_set_vtable):

static void
standard_free (gpointer mem)
{
free (mem);
}
...
/* --- variables --- */
static GMemVTable glib_mem_vtable = {
standard_malloc,
standard_realloc,
standard_free,
standard_calloc,
standard_try_malloc,
standard_try_realloc,
};
...
void
g_free (gpointer mem)
{
if (G_UNLIKELY (!g_mem_initialized))
g_mem_init_nomessage();
if (G_LIKELY (mem))
glib_mem_vtable.free (mem);
TRACE(GLIB_MEM_FREE((void*) mem));
}

glib_mem_vtable.free(mem) 将调用 standard_free(mem),它只会调用 free(mem)。因为这样做是无效的:

 void *mem = malloc(1);
free(mem);
free(mem); // undefined behavior

在同一个内存指针上两次调用 g_free 是无效的,因为它在内部调用了它的参数 free

关于c - 两次释放 glib 缓冲区是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55510708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com