【发布时间】:2020-04-10 17:39:56
【问题描述】:
我正在尝试使用 c++ 向量来存储指向如下结构的指针:
struct SourceDir {
int id;
const unsigned char *alias;
const unsigned char *description;
const unsigned char *path;
};
但是,我无法检索似乎已损坏的值
std::vector<SourceDir*> source_dirs;
while ((step = sqlite3_step(stmt)) != SQLITE_DONE) {
if (step != SQLITE_ROW) {
std::cerr << "[ERROR] internal error (SQLite error code" << step << ")\n";
exit(1);
}
struct SourceDir *sourceDir = new SourceDir;
sourceDir->id = sqlite3_column_int(stmt, 0);
sourceDir->alias = sqlite3_column_text(stmt, 1);
sourceDir->path = sqlite3_column_text(stmt, 2);
sourceDir->description = sqlite3_column_text(stmt, 3);
source_dirs.push_back(sourceDir);
}
for (std::vector<SourceDir*>::iterator it = source_dirs.begin() ; it != source_dirs.end() ; ++it) {
SourceDir *s = *it;
std::cerr << s->description << "\n";
}
它给出像这样的随机值:
@O?V
@O?V
我不明白我做错了什么
【问题讨论】:
-
sqlite 函数返回指向与语句句柄关联的内部内存的指针,这些指针很快就会被销毁。您保存的指针最终指向毫无价值的垃圾。关于如何在 C++ 应用程序中管理内存的更多信息和理解,您应该查阅 C++ 教科书。
-
你为什么不立即获取那些 sqllite 函数的返回值,并从中创建真正的
std::string,而不是在unsigned char *中使用unsigned char *指针? -
谢谢你的建议,我去试试