gpt4 book ai didi

C - 丢失 pointee 结构值

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

**更新。对那些回答不再有意义的人表示抱歉。

所以我想通了,无论我在 Data_pair_node 之后的行上放什么,在它执行之后,就是重置的时候!什么? :

int insert(Table *t, const char *key, const char *val){
int dest_bucket_index;
Table *table = t;
Hash_bucket *dest_bucket = NULL;
Data_pair_node *current = NULL, *prev = NULL, *new_item = NULL;

printf("gonna be zero now");

你瞧:

$23 = (Hash_bucket *) 0x834010
(gdb) step
109 printf("gonna be zero now");
(gdb) print table->buckets
$24 = (Hash_bucket *) 0x0

谢谢艾蒙·富尼耶

最佳答案

您正在使用整数除法(list_count 和 table->bucket_ct 都是整数),因此您的结果将被截断,如果平均存储桶列表长度小于 1.0,您将获得 0 的返回值 --如果哈希表中的桶数多于条目数。

由于您想要双重答案,因此使用双重除法更有意义:

ret = (double)list_count / table->bucket_ct;

编辑

很难说出发生了什么,因为您永远不会打印出 table 的值或显示调用 insert 的代码(这是它获取其值的地方)。但是可能会发生一些事情。

  • table 是一个本地变量,所以编译器可能会把它放在一个寄存器中,并在 table 死后(在最后一次使用之后)重用该寄存器用于其他东西在代码中),在这种情况下,使用 gdb 打印 table 时(或任何依赖它的东西)可能会打印任何东西。

  • 如果 table 是堆栈中的悬空指针(它来自另一个返回局部变量地址的函数),它很可能指向用于其他局部变量的内存变量,在这种情况下,分配给这些本地变量将更改 table->buckets

  • 的值

关于C - 丢失 pointee 结构值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947083/

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