0

首先,我插入 key=str1,value=header_buff

二、我用str2查找指针

第三,我释放了我 malloc 的指针,但失败了。为什么?

#include <stdio.h>
#include <glib.h>
int main()
{
  GHashTable *hash; ///define my hashtable

  char str1[20] = "key";
  char str2[20] = "key";

  char *header_buff = (char*) malloc(sizeof(char) * 1024 * 1024);
  memcpy(header_buff, "value", 5);
  printf("%p\n", header_buff);

  hash = g_hash_table_new(g_str_hash, g_direct_hash); ///here I use (g_str_hash, g_direct_hash)
  g_hash_table_insert(hash, str1, header_buff); /// insert the str1 as key

  char * c = (char*) g_hash_table_lookup(hash, str2); ///use str2 to find the value
  if (c)
  {
    printf("%s\n", c);   ///can print the string "value"
    printf("%p\n", c);
    free(c); ///the same address? but I can't free the mem!
    c = NULL;
  }
  return 0;
}
4

2 回答 2

3

从文档中:

GHashTable *        g_hash_table_new  (GHashFunc hash_func,
                                       GEqualFunc key_equal_func);

因此,您使用的是两个散列函数,而不是一个散列一个相等函数,这反过来又不起作用。

这就是它应该的样子。

table = g_hash_table_new (g_str_hash,g_str_equal);

请注意,g_direct_*如果您不使用相同的字符串实例但包含相同的字符,则可能不起作用。它会直接比较gchar指针

于 2013-08-17T20:24:15.500 回答
-1

一个疯狂的猜测是你在你的平台上缺少 #include 和 sizeof(int) != sizeof(void *) 。

于 2013-08-17T19:57:31.617 回答