关于自动变量清理的问题
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);
谢谢大家的帮助