gpt4 book ai didi

c - GArray 溢出

转载 作者:行者123 更新时间:2023-12-04 04:58:44 28 4
gpt4 key购买 nike

g_array_append_val() 时会发生什么或 GLib 中的其他附加/前置函数之一,使 GArray 的长度大于 guint (unsigned int) 所能容纳的长度?

文档对此没有任何说明,所以我是否应该假设我必须在追加之前自己检查一下(除非我知道该列表永远不会超过 65535 个元素)?

最佳答案

GArray 定义如下:

struct GArray {
gchar *data;
guint len;
};

因此它可以包含内存所能容纳的尽可能多的数据。
而且,guint 是 unsigned int,最大可以是 4Gb,而不是 65536。

深入挖掘 GLib 源代码,您可以看到 g_array_append_val 将调用 g_array_expand,它稍后将依赖 g_realloc 重新分配内存。在 g_realloc 源中,您可以看到:
newmem = glib_mem_vtable.realloc (mem, n_bytes);
TRACE (GLIB_MEM_REALLOC((void*) newmem, (void*)mem, (unsigned int) n_bytes, 0));
if (newmem)
return newmem;

g_error ("%s: failed to allocate %"G_GSIZE_FORMAT" bytes", G_STRLOC, n_bytes);

因此它将失败并显示消息“无法分配 %d 个字节”。

关于c - GArray 溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416057/

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