gpt4 book ai didi

c - GArray 未按预期在初始化时清除

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:01 25 4
gpt4 key购买 nike

我有一些奇怪的 Glib 行为,在互联网上搜索了一下,发现 this Glib tutorial ,第二个代码块要具体:

//ex-garray-2.c
#include <glib.h>
#include <stdio.h> // I added this to make it compile
int main(int argc, char** argv) {
GArray* a = g_array_sized_new(TRUE, TRUE, sizeof(int), 16);
printf("Array preallocation is hidden, so array size == %d\n", a->len);
printf("Array was init'd to zeros, so 3rd item is = %d\n",
g_array_index(a, int, 2));
g_array_free(a, FALSE);

// I removed some code here

return 0;
}

所以,预期的结果应该是

Array preallocation is hidden, so array size == 0
Array was init'd to zeros, so 3rd item is = 0

但我确实明白了

Array preallocation is hidden, so array size == 0
Array was init'd to zeros, so 3rd item is = 901959560

我正在使用 gcc 4.5.3、glibc 2.13 和 glib 2.26.1 运行 Gentoo Linux ~amd64(64 位,测试)。我使用 gcc $(pkg-config --cflags --libs glib-2.0) -o ex-garray-2 ex-garray-2.c

编译程序

知道为什么我得到观察到的行为而不是预期的行为吗?

最佳答案

我对 GLib 不是很熟悉,但我发现它的文档非常具有误导性:g_array_sized_new 中的标志 clear_ 实际上定义了 g_array_set_size 的行为方式,即它是否将位设置为零 在设置数组的大小时。事实上,documentation GLib 说

g_array_sized_new creates a new GArray with reserved_size elements preallocated and a reference count of 1. This avoids frequent reallocation, if you are going to add many elements to the array. Note however that the size of the array is still 0.

因此,您正在尝试访问索引大于数组大小的元素。尝试先使用 g_array_set_size (a,16) 设置数组的大小,然后只有您可以访问第 3 项。

关于c - GArray 未按预期在初始化时清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128331/

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