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_notebook-&gt; 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;
}
}
}
答案 0 :(得分:3)
GetPageCount()将被更改,因此end将保留早期版本值
对于例如。
m_notebook-&gt; GetPageCount()
中有100个结束= 100
在迭代10个项目之后,您将删除5个项目,所以现在列表将有95个项目,但您正在迭代到100个 - 这可能是问题
答案 1 :(得分:1)
如果要从非链接列表中删除项目,则需要迭代列表,并收集要在另一个新列表中删除的所有列表项的索引。完成迭代和收集索引后,使用您收集的每个索引在原始列表上调用delete。