Я пытался применить итерацию к моему файлу leveldb, но, к сожалению, я не смог получить результат.Проблема, с которой я сталкиваюсь, заключается в ошибке сегментации при использовании указателя итератора.Я использовал GDB, и я понял, что проблема в строке
leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
(я добавил до некоторых значений в этот файл / tem / userDb, и дополнение работает хорошо.)
#include <assert.h>
#include <leveldb/db.h>
#include <iostream>
#include <sstream>
using namespace std;
void iteration(leveldb::DB* db)
{
leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next())
{
cout << "key :" << it->key().ToString() << " : "
<< "value:" << it - > value().ToString() << endl;
}
if (false == it->status().ok())
{
cerr << "An error was found during the scan" << endl;
cerr << it->status().ToString() << endl;
}
delete it;
}
int main(int argc, char *argv[])
{
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
// erase error if the database exists
options.error_if_exists = true;
leveldb::Status s = leveldb::DB::Open(options, "/tmp/userDb", &db);
if (!s.ok())
cerr << s.ToString() << endl;
iteration(db);
delete db;
}