Symbian内存泄露,求高人给我看看我的代码到你什么地方崩溃了?急!!!
RPointerArray<CUserInfo>* CDBMSManager::GetContactsByType(TInt aType)
{
_LIT(KSelect, "SELECT ");
_LIT(KFrom, " FROM ");
_LIT(KWhere, " WHERE ");
_LIT(KEqual, "=");
_LIT(KDot, ", ");
TBuf<KCustomSqlMaxLength> sqlStr;
sqlStr.Append(KSelect);
sqlStr.Append(_L(" * "));
sqlStr.Append(KFrom);
sqlStr.Append(KContactTable);
sqlStr.Append(KWhere);
sqlStr.Append(KContactTypeCol);
sqlStr.Append(KEqual);
sqlStr.AppendNum(aType);
/*RDbView view;
User::LeaveIfError(
view.Prepare(iBookDb, TDbQuery(sqlStr), view.EReadOnly));
User::LeaveIfError(view.EvaluateAll());*/
RDbTable table;
TInt err = table.Open(iBookDb, KContactTable, table.EReadOnly);
User::LeaveIfError(err);
table.Reset();
CDbColSet* colSet = table.ColSetL();
RPointerArray<CUserInfo>* userList = new (ELeave) RPointerArray<CUserInfo>(5);
CUserInfo* userInfo = NULL;
TPtrC firstName, secondName, mobile;
for(table.FirstL(); table.AtRow(); table.NextL())
{
table.GetL();
firstName.Set(table.ColDes(colSet->ColNo(KContactFirstNameCol)));
secondName.Set(table.ColDes(colSet->ColNo(KContactSecondNameCol)));
mobile.Set(table.ColDes(colSet->ColNo(KContactMobileCol)));
userInfo = new (ELeave) CUserInfo;
userInfo->iFirstName.Copy(firstName.Left(10));
userInfo->iSecondName.Copy(secondName.Left(10));
userInfo->iMobile.Copy(mobile.Left(20));
TDbColNo typeColNo = colSet->ColNo(KContactTypeCol);
RDbColReadStream readStream; // A stream object for long columns
readStream.OpenLC(table, typeColNo);
userInfo->iType = readStream.ReadInt32L();
readStream.Close();
CleanupStack::Pop(); //readStream
userList->AppendL(userInfo);
}
delete colSet;
return userList;
}
程序证明肯定是在这个程序中出现了内存泄露,因为只要不调用这个函数,程序就没有问题,麻烦高人指点!谢谢。
{
_LIT(KSelect, "SELECT ");
_LIT(KFrom, " FROM ");
_LIT(KWhere, " WHERE ");
_LIT(KEqual, "=");
_LIT(KDot, ", ");
TBuf<KCustomSqlMaxLength> sqlStr;
sqlStr.Append(KSelect);
sqlStr.Append(_L(" * "));
sqlStr.Append(KFrom);
sqlStr.Append(KContactTable);
sqlStr.Append(KWhere);
sqlStr.Append(KContactTypeCol);
sqlStr.Append(KEqual);
sqlStr.AppendNum(aType);
/*RDbView view;
User::LeaveIfError(
view.Prepare(iBookDb, TDbQuery(sqlStr), view.EReadOnly));
User::LeaveIfError(view.EvaluateAll());*/
RDbTable table;
TInt err = table.Open(iBookDb, KContactTable, table.EReadOnly);
User::LeaveIfError(err);
table.Reset();
CDbColSet* colSet = table.ColSetL();
RPointerArray<CUserInfo>* userList = new (ELeave) RPointerArray<CUserInfo>(5);
CUserInfo* userInfo = NULL;
TPtrC firstName, secondName, mobile;
for(table.FirstL(); table.AtRow(); table.NextL())
{
table.GetL();
firstName.Set(table.ColDes(colSet->ColNo(KContactFirstNameCol)));
secondName.Set(table.ColDes(colSet->ColNo(KContactSecondNameCol)));
mobile.Set(table.ColDes(colSet->ColNo(KContactMobileCol)));
userInfo = new (ELeave) CUserInfo;
userInfo->iFirstName.Copy(firstName.Left(10));
userInfo->iSecondName.Copy(secondName.Left(10));
userInfo->iMobile.Copy(mobile.Left(20));
TDbColNo typeColNo = colSet->ColNo(KContactTypeCol);
RDbColReadStream readStream; // A stream object for long columns
readStream.OpenLC(table, typeColNo);
userInfo->iType = readStream.ReadInt32L();
readStream.Close();
CleanupStack::Pop(); //readStream
userList->AppendL(userInfo);
}
delete colSet;
return userList;
}
程序证明肯定是在这个程序中出现了内存泄露,因为只要不调用这个函数,程序就没有问题,麻烦高人指点!谢谢。
...全文
相关推荐
symbian 内存泄露检测工具
symbian 内存泄露 检测工具 按配置配置下就可以使用啦
Symbian OS编程:崩溃处理与活动对象的运用
本文介绍了Symbian OS中的清理栈、崩溃处理、描述符以及活动对象的概念与使用方法。清理栈方法的静态特性简化了代码传递,崩溃处理使用断言来终止程序,描述符用于封装数据与元数据以避免数组越界,活动对象则实现非抢占式多任务处理,是Symbian OS编程中的关键概念。
symbian 内存泄露检测工具 hookloger
symbian ---------------------------------内存泄露检测工具 hookloger
symbian内存检查工具HookLogger
内存泄露 HookLogger 内存检查
symbian 截屏软件源代码
symbian 截屏软件源代码,screenshot 源代码


