C 释放两次glib缓冲区安全吗?

C 释放两次glib缓冲区安全吗?,c,memory-management,glib,double-free,C,Memory Management,Glib,Double Free,释放两次glibg_malloc函数分配的缓冲区是安全的还是禁止的 char *buffer = g_malloc(10); g_free(buffer); g_free(buffer); 从(假设您没有做g_mem_set_vtable到一些花哨的事情): glib\u mem\u vtable.free(mem)将调用standard\u free(mem),它只会调用free(mem)。因为这样做是无效的: void *mem = malloc(1); free(mem); fre

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

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

从(假设您没有做
g_mem_set_vtable
到一些花哨的事情):

glib\u mem\u vtable.free(mem)
将调用
standard\u free(mem)
,它只会调用
free(mem)
。因为这样做是无效的:

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

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

tl;医生:没有。


这完全等同于在同一个分配上调用两次
free()
,这一点。

不确定
glib
,但你为什么要这样做?你为什么想知道?你有什么问题让你问这个?也许你应该直接问这个问题?通常,你不能释放你没有明确分配的内存。一旦你调用了
g_free
一次,指针指向的内存就不再分配。谢谢你的回复,我正在研究一个现有的代码,所以我只需要知道这一点。@Someprogrammerdude我编辑了这个问题,以显示缓冲区也是由g_malloc分配的。你答案的第二部分是我的问题——做两次是否危险,或者是否因为口齿不清而安全。
g\u mem\u set\u vtable()
不推荐使用。不要用它。
 void *mem = malloc(1);
 free(mem);
 free(mem); // undefined behavior