当服务器仍在运行时,哈希表立即变空

时间:2012-09-27 22:21:12

标签: c hashtable

我有一个小的TCP连接,我试图发送一个char数组,我从哈希表中提取。我可以使用密钥作为客户端的IP地址成功地将字符串添加到哈希表中,但是当我尝试获取密钥的值时,它将整个表注册为NULL。

这是文件:

void HandleTCPClient(int clntSocket, char *client_ip, HASHTBL *hashtable)
{
    ...
    ...
    if (strcmp(cmd, "addfile") == 0)
    {
        char arr[1000];
        add = hashtbl_get(hashtable, (char *)client_ip);

        if (add != NULL)
        {
            memcpy(fls, add, strlen(add));
            hashtbl_insert(hashtable, client_ip, fls);
        }
        else
        {
            hashtbl_insert(hashtable, client_ip, fls);
            printf("insert done\n");
        }
        printf("%s\n", hashtbl_get(hashtable, (char *)client_ip));
    }

    else if (strcmp(cmd, "listfiles") == 0)
    {
        char list[1000];
        char *test;

        printf("before getting from hashtable");

        test = hashtbl_get(hashtable, (char *)client_ip);

        printf("%s\n", test);
    }

我正在调用以获取值的函数hashtbl_get具有标题:

void *hashtbl_get(HASHTBL *hashtbl, const char *key);

所以当我传递它时,我将client_ip转换为(char *)

fls是一个小字符数组

hashtbl_get功能在这里:

void *hashtbl_get(HASHTBL *hashtbl, const char *key)
{
struct hashnode_s *node;
hash_size hash=hashtbl->hashfunc(key)%hashtbl->size;

node=hashtbl->nodes[hash];
while(node) {
    if(!strcmp(node->key, key)) return node->data;
    node=node->next;
}

return NULL;
}

问题在于,当我运行我的服务器并调用addfile命令时,它会添加到哈希表中,但是当我调用listfiles时,它就像哈希表现在是空的一样。知道是什么导致了这个吗?

0 个答案:

没有答案