c - 为什么我的哈希从函数返回时是空的?

标签 c struct hashmap

当我执行函数时,我的哈希为空。为什么?

这是我的代码:

#include <stdio.h>
#include <string.h>
#include "uthash.h"
struct oid_struct {
  char descr[20];
  char oid[50];
  UT_hash_handle hh;
};

testadd( struct oid_struct* oid_hash){

 struct oid_struct *element;
 element=(struct oid_struct*) malloc(sizeof(struct oid_struct));

 strcpy(element->descr, "foo");
 strcpy(element->oid, "1.2.1.34");
 HASH_ADD_STR(oid_hash, descr, element);
 printf("Hash has %d entries\n",HASH_COUNT(oid_hash));

}


main(){
        struct oid_struct *oid_hash = NULL, *lookup;
        testadd(oid_hash);
        printf("Hash has %d entries\n",HASH_COUNT(oid_hash));

}

这是输出:

# gcc hashtest.c
# ./a.out
Hash has 1 entries
Hash has 0 entries
#

最佳答案

C 按值传递参数,这意味着 oid_hash副本testadd() 中被更改,因此更改对调用者是不可见的.将oid_hash的地址传给testadd():

testadd(&oid_hash);

void testadd(struct oid_struct** oid_hash)
{
    *oid_hash = element; /* Depending on what is going on
                            inside HASH_ADD_STR(). */
}

注意 malloc() 的返回值的转换不是必需的。

关于c - 为什么我的哈希从函数返回时是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743465/

相关文章:

c++在头文件中定义一组const struct

c++ - 未定义模板的qt隐式实例化 'QList<VPNConnection>'

c - 从结构体中的函数指针访问数据成员

java - Hashmap方法求和

java - HashMap和HashSet根据执行顺序不同的执行时间?

c - C 中的文件问题

c++ - 增加 float 值

c - 如何在 Arduino 上将字符串转换为 uint8_t 数组?

c - WDK驱动程序加载问题(该服务无法启动,或者因为它被禁用)

java - java HashMap.putall 克隆所有元素吗?