gpt4 book ai didi

c - 为什么当元素大小大于实际值大小时会出现 `g_array_append_val` 段错误?

转载 作者:行者123 更新时间:2023-11-30 14:56:57 25 4
gpt4 key购买 nike

我的程序出现如下代码错误:

user_t user;
users = g_array_sized_new(FALSE, TRUE, sizeof(*user), nb_results);
g_array_append_val(users, user);

在第 3 行,我不是通过值添加用户,而是通过指针添加它。有时这会出现段错误。正确的做法是将 GArray 初始化为主机指针:

users = g_array_sized_new(FALSE, TRUE, sizeof(user_t *), nb_results);
g_array_append_val(users, user);

我不明白为什么此代码的第一个版本会出现段错误,因为 sizeof(*user) 大于 sizeof(user_t *)

最佳答案

为了简单起见,我们假设 sizeof *user 是六个字节,而指针是四个字节。这意味着两个用户的数组有 12 个字节,足以容纳三个指针。 但是当您从该数组中获取一个元素时,它将获得一个六字节元素,其中包含一个半指针。

当您尝试将此值存储到指针中时,您将获得第一个指针的一半和另一个指针的一半。这将是无效的,当您取消引用它时,您将得到未定义的行为

关于c - 为什么当元素大小大于实际值大小时会出现 `g_array_append_val` 段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44255726/

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