sqlite数据库插入数据导致内存泄露

onelove2009 2012-04-03 09:44:39
环境:wince5.0 evc 已嵌入sqlite3数据库
问题:我的程序需要每秒保存一次数据,插入数据库,但是在操作sqlite3数据库的一小段代码存在一点点BUG,系统连续运行5小时左右就会崩溃,显示“程序内存严重不足,必须关闭一项任务”,经过测试,下面的代码的屏蔽掉程序可连续运行很长时间,麻烦大家帮我找找问题,感激不尽。。。

try
{
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());
}
...全文
253 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
onelove2009 2012-04-05
  • 打赏
  • 举报
回复
跟踪execDML(LPCTSTR szSQL)函数:
C/C++ code

int CppSQLite3DB::execDML(LPCTSTR szSQL)
{
int nRet;
sqlite3_stmt* pVM;
checkDB();

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 );
}



其中compile(LPCTSTR szSQL)函数如下:
C/C++ code

sqlite3_stmt* CppSQLite3DB::compile(LPCTSTR szSQL)
{
checkDB();
sqlite3_stmt* pVM;

int nRet = _sqlite3_prepare(mpDB, szSQL, -1, &pVM, NULL);

if (nRet != SQLITE_OK)
{
pVM=NULL;
LPCTSTR szError = (LPCTSTR) _sqlite3_errmsg(mpDB);
throw CppSQLite3Exception(nRet, (LPTSTR)szError, DONT_DELETE_MSG);
}
return pVM;
}

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧