关于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,提醒自己下次要注意!

你可能感兴趣的:(Linux编程,数据库,qt)