关于自动变量清理的问题

oliver102 2007-08-25 10:44:27
void CInterfaceTestContainer::UpdateL()
{
//列表显示更新(全部)
//列表数据的获取也是在这里,接受iDocument->Item(i)的数据
_LIT(KTab,"\t");
iListBoxRows->Reset();
if( iDocument->ItemCount() > 0 )
{
for( TInt i = 0; i < iDocument->ItemCount(); ++i )
{
CInterfaceItem* item = iDocument->Item(i);

HBufC* first;//列表中第一行显示的文本A
//CleanupStack::PushL(first);

HBufC* second;//列表中第二行显示的文本B
//CleanupStack::PushL(second);

HBufC* t;//中间用于存放临时的东西C
//CleanupStack::PushL(t);

//PrependLC()用于字符串的连接工作
first = PrependLC( KTab(), *(item->GetInterface()) );A
t = PrependLC( KTab() ,*(item->GetInterfaceType()));C
second=PrependLC( *first, *t );B

//列表中添加数据项
iListBoxRows->AppendL(t->Des());

CleanupStack::PopAndDestroy(t);C
CleanupStack::PopAndDestroy(first);A
CleanupStack::PopAndDestroy(second);B

}

iListBox->HandleItemAdditionL();
}
else
{
iListBox->HandleItemRemovalL();
}
}

这个函数执行完之后程序会自动关闭,应该是指针的问题,如果只留下C的几行(将后面标有A、B的都注释掉)程序没有问题,但是加上就有问题了,不知道是什么问题。

//下面是一些相关的代码
HBufC* PrependLC( const TDesC& aString1, TDesC& aString2 )
{
//连接字符串的工作
HBufC* result = HBufC::NewMaxLC( aString1.Length()+aString2.Length() );
TPtr resultDes = result->Des();
resultDes = aString1;
resultDes.Append( aString2 );
return result;
}
//构建的时候的一些东西
iListBox = new (ELeave) CAknDoubleStyleListBox;
iListBox->ConstructL(this, 0);
iListBox->SetContainerWindowL(*this);
iListBox->SetRect(aRect.Size());


iListBoxRows = new (ELeave) CDesCArrayFlat(10 );
iListBox->Model()->SetItemTextArray( iListBoxRows );
iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);

iListBox->ActivateL();
iListBox->CreateScrollBarFrameL(ETrue);
iListBox->ScrollBarFrame()
->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn,CEikScrollBarFrame::EAuto);

谢谢大家的帮助
...全文
88 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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