问题描述
点击登陆按钮时,会创建一个登陆对象(该对象是一个登陆UI界面,包含一个db数据库连接和查询),关闭该登陆UI界面后,再次点击登陆,会出现一个异常:未经处理的异常: 0xc0000374: 堆已损坏。
解决:
这个操作等于一次性建立了两个数据库连接,并且连接的都是同一个数据库(不知道这样是否合法)。
把数据库连接设为静态变量,并在创建数据库连接之前检查是否已经创建该数据库,这样就能保证多个对象共享一个数据库连接(似乎用单件模式更好),问题解决。
其它类似问题
void Login::queryInDB()
{
QSqlQuery query = QSqlQuery(DB);
query->prepare("select * from account where username = :username");
query->bindValue(":username", username);
query->exec();
while (query->next())
{
if (password == query->value("password").toString())
{
QMessageBox::information(this, "message", "welcome to you");
this->close();
}
else
{
QMessageBox::warning(this, "error", "username or password is wrong!\nPlease input again");
}
}
}//此处出现 未经处理的异常: 0xc0000374: 堆已损坏
猜测原因:把QSqlQuery对象声明在栈上,空间不够?
在项目属性的qt project setting中,把SQL勾选上就没问题了。
哭死,还以为是局部变量声明在栈上的问题,结果是qt插件的问题。
我被这个问题搞了三天了,啊啊啊啊啊啊啊,我为什么要在vs上用qt啊啊啊啊啊
本文描述了一个登陆UI界面在多次点击登陆按钮时出现的异常问题:未经处理的异常0xc0000374堆已损坏。通过将数据库连接设置为静态变量并检查重复创建,避免了同时建立多个数据库连接,从而解决了问题。同时,文章还提到了在Qt项目设置中勾选SQL选项可以避免类似异常。


被折叠的 条评论
为什么被折叠?



