所以我目前正在通過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行來允許重複條目,但是可能會出現我錯過的東西?
首先,當函數失敗時,應該_always_檢查返回值。這可能不是你的直接問題,但它仍然是一個好習慣。 – paxdiablo 2012-04-05 04:29:41
好吧,所以我試圖獲得DBpointer-> c_get調用的返回值,但這是我得到分段錯誤的原因,所以我甚至不知道它是什麼。 :S即使我將它從while循環中取出並調用一次,仍然會出現錯誤。 – 2012-04-05 04:38:51