调用 DB->put() 后,我在释放内存时遇到问题。当我这样做时,它说“双重免费或腐败”。
代码示例:
DBT key,value;
int err;
...
memset(value,0,sizeof(DBT));
value.data=malloc(10);
memset(value.data,10);
value.flags=DB_DBT_MALLOC;
...
value.size=10;
...
if((err=db->put(db,NULL,&key,&value,0))){
...
}
free(value.data);
C API 参考不包含有关该主题的任何信息,它仅提供有关在检索(但不存储)数据时使用 DB_DBT_MALLOC 的一些信息:
设置此标志时,Berkeley DB 将为返回的键或数据项分配内存(使用 malloc(3) 或用户指定的 malloc 函数),并在键或数据 DBT 的数据字段中返回指向它的指针结构体。因为任何分配的内存都成为调用应用程序的责任,所以调用者必须确定是否使用数据字段的返回值分配了内存。
当调用 DB->put 时,Berkeley DB 不返回任何数据,它只存储一个键/数据对。它是否复制数据,或者在调用 DB->close 或 ENV->close 之前内存是否应该存在?