void Mainframe::OnClearNotebook( wxCommandEvent& e )
{
int end = m_notebook->GetPageCount();
for ( int i = 0; i < end; i++ )
{
if ( m_notebook->GetPageText( i ) != "Server Log" )
{
m_notebook->DeletePage(i);
}
}
}此代码以此形式崩溃,其消息为“m_记事本->GetPageText()索引超出范围”;
如何正确地遍历所有页面?
编辑,解决方案:
void Mainframe::OnClearNotebook( wxCommandEvent& e )
{
while ( m_notebook->GetPageCount() > 1 )
{
int end = m_notebook->GetPageCount() - 1;
if ( m_notebook->GetPageText( end ) != "Server Log" )
{
m_notebook->DeletePage(end);
}
else
{
break;
}
}
}发布于 2013-10-03 05:24:37
如果以务实方式删除,则GetPageCount()将被更改,因此end将保留早期版本的值
就像。
你有100在m_记事本->GetPageCount()
所以结尾= 100
在迭代10项之后,您将删除5项,所以现在列表中将有95项,但是您正在迭代到100项--这可能是个问题。
发布于 2013-10-03 05:30:37
如果要从非链接列表中删除项,则需要迭代列表,并收集要在另一个新列表中删除的所有列表项的索引。一旦您完成了迭代和收集索引,使用您收集的每个索引调用原始列表中的delete。
https://stackoverflow.com/questions/19151343
复制相似问题