現在、C を使用して Berkeley データベースに取り組んでいますが、データの重複を許可するという小さな問題に遭遇しました。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 行を追加するだけで済みますが、何か見落としがあるのでしょうか?