gpt4 book ai didi

c - 如何让 DBCursor->get(...) 识别我为 key.data 和 data.data 分配的内存

转载 作者:行者123 更新时间:2023-11-30 17:15:27 27 4
gpt4 key购买 nike

我正在开发一个 C 程序,用于从 BerkeleyDB DBTree 数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将键的 DBT 和数据的另一个 DBT 清零,将 DBT 标志设置为 DB_DBT_USERMEM,为 DBT 的数据成员分配大缓冲区,将 DBT ulen 插槽设置为分配的缓冲区的大小,得到光标,来到这一行

ret = 游标->get(游标, &key, &data, DB_NEXT);

尽管分配的缓冲区为 2056 个字符,并且 key.data 的大小为 25,data.data 的大小为 75,但 ret 始终为 DB_BUFFER_SMALL。

我做错了什么?

最佳答案

感谢您提出问题。它引导我找到了解决方案,那就是

/* Initialize key/data structures. */
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));

key.flags = DB_DBT_USERMEM;
data.flags = DB_DBT_USERMEM;

key.data = (char *)malloc(dataSize);
key.ulen = dataSize;
data.data = (char *)malloc(dataSize);
data.ulen = dataSize;

memset(key.data, 0, sizeof(key.data));
memset(data.data, 0, sizeof(data.data));

而不是

/* Initialize key/data structures. */
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));

key.flags = DB_DBT_USERMEM;
data.flags = DB_DBT_USERMEM;

key.data = (char *)malloc(dataSize);
key.ulen = dataSize;
data.data = (char *)malloc(dataSize);
data.ulen = dataSize;

memset(&(key.data), 0, sizeof(key.data));
memset(&(data.data), 0, sizeof(data.data));

我将一个指向 char * 指针的指针传递给 memset,而不是传递指针本身。你的问题让我对初始化代码产生了疑问。

谢谢

关于c - 如何让 DBCursor->get(...) 识别我为 key.data 和 data.data 分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com