sqlite数据库插入数据导致内存泄露环境:wince5.0 evc 已嵌入sqlite3数据库问题:我的程序需要每秒保存一次
sqlite数据库插入数据导致内存泄露
环境:wince5.0 evc 已嵌入sqlite3数据库
问题:我的程序需要每秒保存一次数据,插入数据库,但是在操作sqlite3数据库的一小段代码存在一点点BUG,系统连续运行5小时左右就会崩溃,显示“程序内存严重不足,必须关闭一项任务”,经过测试,下面的代码的屏蔽掉程序可连续运行很长时间,麻烦大家帮我找找问题,感激不尽。。。
C/C++ codetry { CString str_temp; str_temp.Format(_T(" values('%f','%f','%f','%f','%f','%f','%d','%d','%d','%d','%d','%d')"),fData[0],fData[1],fData[2],fData[3], fData[4],fData[5],t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond()); str_temp="insert into "+m_strTableName+str_temp; //插入一笔记录 m_Sqlite3db.execDML(str_temp); } catch(CppSQLite3Exception ex) { AfxMessageBox(ex.errorMessage()); }
[解决办法]和 sqlite3 相关的也就这么一句话: m_Sqlite3db.execDML(str_temp);
先注释此句后试试看如何吧
[解决办法]CString str_temp;
str_temp.Format(_T(" values('%f','%f','%f','%f','%f','%f','%d','%d','%d','%d','%d','%d')"),fData[0],fData[1],fData[2],fData[3],
fData[4],fData[5],t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());
str_temp="insert into "+m_strTableName+str_temp;
改为WCHAR数组和_wsprintf来做。另外看下是不是报了异常
do{
pVM = compile(szSQL);
nRet = _sqlite3_step(pVM);
if (nRet == SQLITE_ERROR)
{
LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB);
throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG);
}
nRet = _sqlite3_finalize(pVM);
}
while( nRet == SQLITE_SCHEMA );
这段代码有点问题,nRet == SQLITE_ERROR的时候直接抛出异常,都没调用_sqlite3_finalize(pVM);
[解决办法]看样子还真是execDML的问题
http://topic.csdn.net/u/20100930/15/032f0887-85cc-43ea-8c8f-6980e4e780ec.html?290968101
http://topic.csdn.net/u/20120226/14/99bdfcb9-fef0-4d94-9c56-446349e20e8a.html
http://topic.csdn.net/u/20090727/13/b249254c-4420-43a7-b503-7c612f008759.html
[解决办法]换个版本比较新的sqlite
[解决办法]