如何获取DBCursor->;获取(…)以识别我为key.data和data.data分配的内存
我正在开发一个C程序,从BerkeleyDB数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将一个DBT归零为key,另一个归零为data,将DBT标志设置为DB_DBT_USERMEM,将DBT的数据成员设置为malloc large buffers,将DBT ulen slot设置为分配的缓冲区的大小,获取一个游标,然后转到这一行 ret=cursor->get(光标、键和数据、DB\u NEXT) 尽管malloced缓冲区是2056个字符,key.data的大小是25,data.data的大小是75,但ret总是DB_BUFFER_小如何获取DBCursor->;获取(…)以识别我为key.data和data.data分配的内存,c,berkeley-db,C,Berkeley Db,我正在开发一个C程序,从BerkeleyDB数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将一个DBT归零为key,另一个归零为data,将DBT标志设置为DB_DBT_USERMEM,将DBT的数据成员设置为malloc large buffers,将DBT ulen slot设置为分配的缓冲区的大小,获取一个游标,然后转到这一行 ret=cursor->get(光标、键和数据、DB\u NEXT) 尽管malloced缓冲区是2056个字符,key.data的大小是25,da
我做错了什么?谢谢你的提问。这让我找到了解决办法,那就是
/* 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,而不是传递指针本身。你的问题让我对初始化代码产生了疑问
谢谢我将malloced内存缓冲区分配给DBT数据成员,如下'key.data=(char*)malloc(dataSize);key.ulen=dataSize;'听起来你做得对。USERMEM标志是最容易出错的地方。你能发布你用来初始化密钥和数据的确切代码吗?太好了!由于您的描述听起来是正确的,所以它必须是关于实现的特定内容。