CPtrArray在移除时出现有关问题
CPtrArray在移除时出现问题
CPtrArray cpa;
int count = cpa.GetSize();
for(int i = 0; i < count; i++)
{
cpa.RemoveAt(i); //1.这样处理会出问题 }
或:
for(int i = count -1; i >= 0; i--)
{
cpa.RemoveAt(i);//2.这样是没问题的
}
上面用红色标注的两句,实在是不明白为什么会出现这样的问题, 貌似上面一句没有越界问题,如果只能用下面那句,那么如果我想从第一项删除时岂不很麻烦?
------解决方案--------------------
第一个循环肯定有问题的。因为你使用了固定的循环次数,但由于你RemoveAt函数,导致数组中的实际数量在减少,所以删掉一半以后就会崩溃了。
改为:
for(int i = 0; i < count; i++)
{
cpa.RemoveAt(0); //始终删除第0个
}
==========
第二个就没问题了,因为指定的删除需要会一直存在
------解决方案--------------------
for(int i = 0; i < count; i++)
{
cpa.RemoveAt(i); //1.这样处理会出问题 }
}
当i=0时,删除数组第0个,此时数组中原来的第1个就变成了第0个,但是此时i=1,count也重新变成了count-1 ,依次类推,在执行到一半时就删除越界了
------解决方案--------------------
偶也犯过这问题。
因为控件容器都是动态规划的。
删除一个以后索引就变少了。导致越界了。
------解决方案--------------------
应该从大 删除到 小
CPtrArray cpa;
int count = cpa.GetSize();
for(int i = 0; i < count; i++)
{
cpa.RemoveAt(i); //1.这样处理会出问题 }
或:
for(int i = count -1; i >= 0; i--)
{
cpa.RemoveAt(i);//2.这样是没问题的
}
上面用红色标注的两句,实在是不明白为什么会出现这样的问题, 貌似上面一句没有越界问题,如果只能用下面那句,那么如果我想从第一项删除时岂不很麻烦?
------解决方案--------------------
第一个循环肯定有问题的。因为你使用了固定的循环次数,但由于你RemoveAt函数,导致数组中的实际数量在减少,所以删掉一半以后就会崩溃了。
改为:
for(int i = 0; i < count; i++)
{
cpa.RemoveAt(0); //始终删除第0个
}
==========
第二个就没问题了,因为指定的删除需要会一直存在
------解决方案--------------------
for(int i = 0; i < count; i++)
{
cpa.RemoveAt(i); //1.这样处理会出问题 }
}
当i=0时,删除数组第0个,此时数组中原来的第1个就变成了第0个,但是此时i=1,count也重新变成了count-1 ,依次类推,在执行到一半时就删除越界了
------解决方案--------------------
偶也犯过这问题。
因为控件容器都是动态规划的。
删除一个以后索引就变少了。导致越界了。
------解决方案--------------------
应该从大 删除到 小