问题标签 [uthash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1458 浏览

c - UTHash 多级哈希表在 HASH_FIND_STR 上崩溃

我有两个这样的结构:

在我的代码中,我做了这样的事情

这似乎给了我 HASH_FIND_STR() 的段错误。有什么我做错了吗?在此示例中,假设 my_item1 和 my_item2 来自其他地方并且是有效的。我想使用 stringkey 作为键来查找值。

我在条件部分放了一个断点IF,所以我知道一开始没有找到它,然后在第二次找到那个键时,else进入了块。

有趣的是,如果我使用 HASH_ITER 遍历条目,它似乎“工作”至少没有崩溃,尽管我不相信所有的值都是相同的。

0 投票
1 回答
244 浏览

c - 函数调用中的 UTHash 迭代一次但不是第二次

我在局部变量上使用 uthash 时遇到了一些问题。

我的代码看起来像这样,query_dict 是一个局部变量 uthash:

接近一点了:

对 print_query_struct 的调用运行良好,但对预取令牌的调用执行一次迭代,然后崩溃:

地址,0x0000001000000000 总是相同的。

我一直在尝试各种不同的东西,但无法让它发挥作用。这里有人知道发生了什么吗?

结构:

编辑:我已经简化了代码并制作了一个较小的可运行示例,但本质上,这是失败的代码:http: //pastebin.com/qdDiQMG0 编译,然后使用 ./binary 运行

例如。./binary "清洗帮助"

编辑2:即使我不太明白它为什么起作用,也解决了它:从以下位置重写了init_alloc_query:

像这样工作:

一切运行良好。

0 投票
1 回答
1308 浏览

c - 使用 utash HASH_ADD_KEYPTR(分段错误)

所以我正在尝试将 uthash 与以下结构一起使用

我的哈希表 HASH_TABLE 是一个全局变量。

我主要说

创建我的 hash_item 后,我尝试将其添加到 HASH_TABLE 中,如下所示。

当我检查我为什么会出现段错误时,gdb 说它在这条线上:

我不知道为什么,这是段错误,我似乎无法得到任何进一步的澄清。

任何想法是什么问题或我如何缩小范围以识别问题?

编辑:按要求添加了我的整个代码

0 投票
2 回答
309 浏览

c - 哈希表中的无效读取

我正在使用uthash.h来存储我的应用程序的配置。由于配置来自运行时读取的文件,因此哈希中的键和值都是动态分配char *的:

正如用户指南中所解释的,我实现了自己的函数来向 config-hash 添加键以确保唯一性。这里是:

我还写了一些测试用例来检查我的实现,它们似乎运行得很好。但是,如果我使用 valgrind 运行测试来检查 memleaks,我总是会得到以下信息:

这是测试用例和完整性的实现cfg_get

cfg_get

不知何故,似乎我在将旧name指针cfg_get覆盖在cfg_put. 问题只出现在 中name,而不出现在 中value。我太愚蠢了,无法弄清楚,谢谢任何建议。

0 投票
1 回答
64 浏览

c - 来自不兼容指针类型的赋值问题

嘿,所以我试图尝试读取文件,将其存储在哈希中,然后复制它。但是我得到了不兼容的指针类型

}

该代码在我初始化时有效,const char **n, *names = {array elements here}; 但它不适用于我拥有的代码。请帮忙。

0 投票
2 回答
183 浏览

c - utarray.h 中的“函数的隐式声明”(uthash 的一部分)

我正在为一个项目使用 utarray ( uthash 库的一部分)。每当我包含它时,我都会收到以下错误:

诚然,我在编译 ( -Wall -Wpedantic -Wextra -Werror -pedantic-errors -std=c99) 时使用了一些非常激进的标志,但我不明白为什么这应该是一个错误。strdupstring.h(根据man strdup)中定义,非常清楚地包含在 中utarray.h

我究竟做错了什么?谷歌没有帮助。(显然没有其他人尝试utarray.h使用这些标志进行编译?)

这是一个无法编译的示例文件(使用gcc -Wall -Wpedantic -Wextra -Werror -pedantic-errors -std=c99 scratch.c)。

版本:gcc 4.9.2、glibc 2.21、uthash 1.9.9

0 投票
1 回答
414 浏览

c - uthash:2级哈希表,在嵌套表中添加新元素

我有一个 2 级哈希表,如此处所述 uthash),具有如下声明的两个不同结构。哈希结构 b 通过哈希结构 a 中的参数 d 保存 s 值的总数及其频率(为了更好地理解,请看下面的设计)。

update 函数应该是这样工作的:如果第一次遇到 s,将它添加到 struct myb 并添加到 struct mya。如果它已经在 struct myb 中,则检查是否第一次遇到它的 d 值,以防将其添加到 struct mya 中,否则增加它的值。

但是,当我运行代码时,它会将第一次遇到的 d 值保存在哈希结构 mya 中(并在这种情况下增加),但我没有添加在相同 s 值上收到的其他 d 值......代码有什么问题?

0 投票
1 回答
498 浏览

c - (int, const char *) 作为 uthash 库的复合键

我想将utash库用于带有一对intconst char *作为复合键的哈希表:

具体来说,我希望指向的字符串const char *成为键的一部分。澄清一下:指针的不同值可能对应于同一个字符串(在 的意义上strcmp())。

用户指南展示了如何使用intchar[]作为复合键来实现类似于我想要的键:

但是,第二种方法(即(int, char[]))假设字符串被复制到char[],但我想避免复制。

另外,我不是为了利用和方便宏而寻找连接int和指向的字符串。const char *HASH_ADD_KEYPTR()HASH_FIND_STR()

我不知道如何使用第一种方法(即)来使用HASH_ADD(),和其他通用宏。看起来不可能避免复制,就像 uthash 库设计一样。我理解对吗?还是有我忽略的非复制方法?HASH_FIND()(int, const char *)

0 投票
0 回答
318 浏览

c - utash 删除和内存泄漏,valgrind

我使用带有结构的utash哈希表实现。

我有两个哈希表,其中一个(代码中的dataTable)在循环中收集一些信息,当它完成时,将一些数据保存在另一个哈希表(即stuffTable)中。我的程序可以工作(至少对于小文件),但是当我用 valgrind 检查它时,它发现第二个哈希表(stuffTable)的内存泄漏(但第一个表没有泄漏,即使我以同样的方式释放它)

正如你所看到的,我只做 malloc 来创建一个新节点,并且在我为其分配内存的 stuff struct 中没有其他数据结构。所以我不明白是什么导致内存泄漏。要删除哈希表,我使用 uthash 文档给出的标准程序:

这是我的代码:

0 投票
2 回答
96 浏览

c - utash 和 utarray 向后兼容吗?

我特别关注 utarray 版本 2.0.2 与 1.9.6。(最近的版权分别是 2017 年和 2012 年)。

我需要将 utarray.h 添加到使用 utarray.h 的现有项目中,并且希望这两个标头都来自相同的版本/提交,所以我正在考虑用新的 utarray.h 替换旧的 utarray.h。

我应该注意我并不十分担心编译时的不兼容性,例如名称更改等。我主要担心的是运行时损坏。