关于Qt数据库操作中发现的坑

关于QT数据库操作中发现的坑

最近一直在搞嵌入式Linux的应用开发,在使用QT4做界面时,突然发现有个历史数据查询界面点击进去时经常崩溃,不是直接段错误退出,就是整个程序崩溃,报“corrupted double-linked list”内存越界错误。判断bug应该是内存越界或操作空指针了,检查调用界面的代码,没什么错误,只好对界面类的构造函数中的代码一条条跟踪,最终发现是构造函数中从SQLITE3系统配置数据库中读取历史数据库路径名称的函数调用导致的。
再在读取系统配置函数中跟踪,最终发现原来是写QSqlQuery查询对象执行查询函数exec时,没有代入SQL语句。代码如下:

QSqlQuery query(dbConn);
QString strSql = QString("SELECT CfgName,CfgValue FROM SysConfig Where CfgName = '%1'").arg(cfgName);
bool ret = query.exec();     // bool ret = query.exec(strSql);
if(!ret){
	dbConn.close();
	return false;
}

就是第三行的exec函数忘了代入strSql,问题是ret返回为false,我也判断了返回false时,关闭数据库退出函数,按道理来讲不应该造成内存错误,执行不成功应该返回false即可。不知道是不是QT的数据库组件没有处理好,执行空查询时,造成了内存错误。修改相应错误后,没有再出现崩溃的情况。在此记录一下此次bug,提醒自己下次要注意!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值