构造对象时,代码在sqlite_step循环中终止

Code terminates in sqlite_step loop when constructing an object

本文关键字:step 循环 终止 sqlite 对象 代码      更新时间:2024-09-30
sqlite3 *db;
sqlite3_stmt *stmt;
const char *zErrMsg;
sqlite3_open("Resources/Database/database.db", &db);
/*
* Loads tile objects.
*/
std::string selectTileObjects = "SELECT * FROM TILEOBJECTS;";
sqlite3_prepare(db, selectTileObjects.c_str(), selectTileObjects.length(),
&stmt, &zErrMsg);
while (sqlite3_step(stmt) == SQLITE_ROW) {
unsigned int artId = sqlite3_column_int(stmt, 0);
bool animated = sqlite3_column_int(stmt, 1);
bool passable = sqlite3_column_int(stmt, 2);
bool mountain = sqlite3_column_int(stmt, 3);
bool water = sqlite3_column_int(stmt, 4);
//TileObject newObject(artId, animated, passable, mountain, water);
//tileObjects.push_back(newObject);
}

此代码的问题似乎与使用SQLite包装器无关,因为在调试";而(TRUE(";除了保存sqlite3_step(stmt(的值(它总是正确地导致SQLITE_ROW,直到它完成为止(导致崩溃之外,两行注释掉的行似乎导致了这个问题,但是tile对象构造函数没有显示任何有用的东西:

TileObject::TileObject(const unsigned int artId, const bool animated, const bool passable,
const bool mountain, const bool water) noexcept :
artId(artId), animated(animated), passable(passable), mountain(
mountain), water(water) {
}

数据库成功打开,所有变量都正确加载,构造函数并没有任何可能导致问题的内容,所以我忽略了什么明显的错误吗?

Tile对象是TileObject类的静态向量
  • 循环正确执行一次,并在第二个循环开始时终止(不抛出错误(。无论情况如何,都会发生这种情况
  • -如果我将TileObject更改为TileObject指针的向量,代码运行良好,但如果我尝试创建TileObject指示器并在将其推入向量时取消引用,则会在第二个循环后导致相同的终止。

    当对象在使用完成后在堆上创建时,调用析构函数,如果您执行"删除此";不在堆栈上分配内存将导致终止。