所以我目前正在通过 C 语言处理伯克利数据库,我遇到了一个关于允许重复数据的小问题。如果我不允许通过 DB->set_flags 重复条目,并且我使用游标遍历数据库中的项目,那么一切正常。当我在我的程序中添加 DB->set_flags 行并且没有更改任何其他内容时,我遇到了分段错误并且我不知道如何修复它,考虑到它可以正常工作而没有重复条目。代码如下:
DB *dates_db;
db_create(&dates_db, NULL, 0);
dates_db->set_flags(dates_db, DB_DUP);
dates_db->open(dates_db, NULL, "da.idx", NULL, DB_BTREE, 0, 0664);
DBT key, data;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
DBC *DBpointer;
dates_db->cursor(dates_db, NULL, &DBpointer, 0);
while(DBpointer->c_get(DBpointer, &key, &data, DB_NEXT) != DB_NOTFOUND)
{
printf("The key is: %s\nThe data is: %s\n", (char *)key.data, (char *)data.data);
}
谁能告诉我我需要添加什么?我已经检查了包含有关 Berkeley DB 的所有信息的 sourceforge 页面,据我所知,我只需要添加 DB->set_flags 行以允许重复条目,但是我可能错过了什么吗?