2005-12-26 11:26
lululu
关于BerkeleyDB的问题?请教大家!谢谢
我使用c++的API,这样使用的:
struct AddressBook
{
char name[8];
char number[20];
};
void main()
{
Db db(NULL,0);
db.open(NULL,DATABASE,NULL,DB_BTREE,DB_CREATE|DB_THREAD,0664);
fprintf(stderr,"Open db succeed!\n");
//save to db
AddressBook address;
QString tmpName="aaa";
unsigned short tmpNameLength=tmpName.length();
for(int i=0;i<tmpNameLength;i++)
{
address.name[i]=tmpName.constref(i);
}
address.name[tmpNameLength]='\0';
QString tmpNumber="111";
unsigned short tmpNumberLength=tmpNumber.length();
for(int i=0;i<tmpNumberLength;i++)
{
address.number[i]=tmpNumber.constref(i);
}
address.number[tmpNumberLength]='\0';
//put
Dbt key(address.name,strlen(address.name)+1);
Dbt data(&address,sizeof(AddressBook)+1);
int ret=db.put(0,&key,&data,DB_NOOVERWRITE);
fprintf(stderr,"ret=%d\n",ret);
db.sync(0);
db.close(0);
}
报错:Abort,也就是Pag Fault
我试了一下,好象只要我使用Db::put函数将新的记录加入到数据库之后,关闭close或者同步sync操作就会报错,如果把put注释掉就不会报错,或者记录因key重复没有加入成功,也可以正常关闭数据库。
请问是什么原因啊? 谢谢!