问题标签 [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.
c - UTHash 多级哈希表在 HASH_FIND_STR 上崩溃
我有两个这样的结构:
在我的代码中,我做了这样的事情
这似乎给了我 HASH_FIND_STR() 的段错误。有什么我做错了吗?在此示例中,假设 my_item1 和 my_item2 来自其他地方并且是有效的。我想使用 stringkey 作为键来查找值。
我在条件部分放了一个断点IF
,所以我知道一开始没有找到它,然后在第二次找到那个键时,else
进入了块。
有趣的是,如果我使用 HASH_ITER 遍历条目,它似乎“工作”至少没有崩溃,尽管我不相信所有的值都是相同的。
c - 函数调用中的 UTHash 迭代一次但不是第二次
我在局部变量上使用 uthash 时遇到了一些问题。
我的代码看起来像这样,query_dict 是一个局部变量 uthash:
接近一点了:
对 print_query_struct 的调用运行良好,但对预取令牌的调用执行一次迭代,然后崩溃:
地址,0x0000001000000000 总是相同的。
我一直在尝试各种不同的东西,但无法让它发挥作用。这里有人知道发生了什么吗?
结构:
编辑:我已经简化了代码并制作了一个较小的可运行示例,但本质上,这是失败的代码:http: //pastebin.com/qdDiQMG0 编译,然后使用 ./binary 运行
例如。./binary "清洗帮助"
编辑2:即使我不太明白它为什么起作用,也解决了它:从以下位置重写了init_alloc_query:
像这样工作:
一切运行良好。
c - 使用 utash HASH_ADD_KEYPTR(分段错误)
所以我正在尝试将 uthash 与以下结构一起使用
我的哈希表 HASH_TABLE 是一个全局变量。
我主要说
创建我的 hash_item 后,我尝试将其添加到 HASH_TABLE 中,如下所示。
当我检查我为什么会出现段错误时,gdb 说它在这条线上:
我不知道为什么,这是段错误,我似乎无法得到任何进一步的澄清。
任何想法是什么问题或我如何缩小范围以识别问题?
编辑:按要求添加了我的整个代码
c - 哈希表中的无效读取
我正在使用uthash.h来存储我的应用程序的配置。由于配置来自运行时读取的文件,因此哈希中的键和值都是动态分配char *
的:
正如用户指南中所解释的,我实现了自己的函数来向 config-hash 添加键以确保唯一性。这里是:
我还写了一些测试用例来检查我的实现,它们似乎运行得很好。但是,如果我使用 valgrind 运行测试来检查 memleaks,我总是会得到以下信息:
这是测试用例和完整性的实现cfg_get
:
cfg_get
:
不知何故,似乎我在将旧name
指针cfg_get
覆盖在cfg_put
. 问题只出现在 中name
,而不出现在 中value
。我太愚蠢了,无法弄清楚,谢谢任何建议。
c - 来自不兼容指针类型的赋值问题
嘿,所以我试图尝试读取文件,将其存储在哈希中,然后复制它。但是我得到了不兼容的指针类型
}
该代码在我初始化时有效,const char **n, *names = {array elements here};
但它不适用于我拥有的代码。请帮忙。
c - utarray.h 中的“函数的隐式声明”(uthash 的一部分)
我正在为一个项目使用 utarray ( uthash 库的一部分)。每当我包含它时,我都会收到以下错误:
诚然,我在编译 ( -Wall -Wpedantic -Wextra -Werror -pedantic-errors -std=c99
) 时使用了一些非常激进的标志,但我不明白为什么这应该是一个错误。strdup
在string.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
c - uthash:2级哈希表,在嵌套表中添加新元素
我有一个 2 级哈希表,如此处所述( uthash),具有如下声明的两个不同结构。哈希结构 b 通过哈希结构 a 中的参数 d 保存 s 值的总数及其频率(为了更好地理解,请看下面的设计)。
update 函数应该是这样工作的:如果第一次遇到 s,将它添加到 struct myb 并添加到 struct mya。如果它已经在 struct myb 中,则检查是否第一次遇到它的 d 值,以防将其添加到 struct mya 中,否则增加它的值。
但是,当我运行代码时,它会将第一次遇到的 d 值保存在哈希结构 mya 中(并在这种情况下增加),但我没有添加在相同 s 值上收到的其他 d 值......代码有什么问题?
c - (int, const char *) 作为 uthash 库的复合键
我想将utash库用于带有一对int
和const char *
作为复合键的哈希表:
具体来说,我希望指向的字符串const char *
成为键的一部分。澄清一下:指针的不同值可能对应于同一个字符串(在 的意义上strcmp()
)。
用户指南展示了如何使用int
和char[]
作为复合键来实现类似于我想要的键:
但是,第二种方法(即(int, char[])
)假设字符串被复制到char[]
,但我想避免复制。
另外,我不是为了利用和方便宏而寻找连接int
和指向的字符串。const char *
HASH_ADD_KEYPTR()
HASH_FIND_STR()
我不知道如何使用第一种方法(即)来使用HASH_ADD()
,和其他通用宏。看起来不可能避免复制,就像 uthash 库设计一样。我理解对吗?还是有我忽略的非复制方法?HASH_FIND()
(int, const char *)
c - utash 删除和内存泄漏,valgrind
我使用带有结构的utash哈希表实现。
我有两个哈希表,其中一个(代码中的dataTable)在循环中收集一些信息,当它完成时,将一些数据保存在另一个哈希表(即stuffTable)中。我的程序可以工作(至少对于小文件),但是当我用 valgrind 检查它时,它发现第二个哈希表(stuffTable)的内存泄漏(但第一个表没有泄漏,即使我以同样的方式释放它)
正如你所看到的,我只做 malloc 来创建一个新节点,并且在我为其分配内存的 stuff struct 中没有其他数据结构。所以我不明白是什么导致内存泄漏。要删除哈希表,我使用 uthash 文档给出的标准程序:
这是我的代码:
c - utash 和 utarray 向后兼容吗?
我特别关注 utarray 版本 2.0.2 与 1.9.6。(最近的版权分别是 2017 年和 2012 年)。
我需要将 utarray.h 添加到使用 utarray.h 的现有项目中,并且希望这两个标头都来自相同的版本/提交,所以我正在考虑用新的 utarray.h 替换旧的 utarray.h。
我应该注意我并不十分担心编译时的不兼容性,例如名称更改等。我主要担心的是运行时损坏。