当我执行函数时,我的哈希为空。为什么?
这是我的代码:
#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/