首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

*为什么会coredump 呢?该如何处理

2012-03-14 
*************************************为什么会coredump 呢?erase导致,谁解释下,怎样改?#includeiostrea

*************************************为什么会coredump 呢?
erase   导致,谁解释下,怎样改?

#include   <iostream>
#include   <list>


using   namespace   std;

int   main()
{
                list <int>   listTest;
                listTest.push_back(1);
                list <int> ::iterator   iter;

                for(iter   =listTest.begin();iter!=listTest.end();iter++)
                {
                                if   (*iter==1)
                                {
                                                listTest.erase(iter);
                                                continue;
                                }
                                cout   < <   "no   iter   is   1 "   < <   endl;


                }
                return   0;

}

[解决办法]
这个是标准的,只要你用的是符合标准的编译器,比如g++3.4.2,比如vc++8.0
#include <iostream>
#include <list>
using namespace std;
int main()
{
list <int> listTest;
listTest.push_back(1);

for( list <int> ::iterator iter=listTest.begin(); iter!=listTest.end(); )
{
if( *iter == 1 )
iter = listTest.erase(iter);
else
++iter;
}
return 0;
}

这个是取巧的,vc++6.0估计也可以
#include <iostream>
#include <list>
using namespace std;
int main()
{
list <int> listTest;
listTest.push_back(1);

for( list <int> ::iterator iter=listTest.begin(); iter!=listTest.end(); )
{
if( *iter == 1 )
listTest.erase(iter++);
else
++iter;
}
return 0;
}
[解决办法]
list <int> listTest;
listTest.push_back(1);



listTest.remove(1);
[解决办法]
删了后,iter失效了.
因为listTest里只有一个元素,即使使用iter = listTest.erase(iter);
执行后,iter指向end的下一个元素,然后再执行iter++的时候就出界了。所以出错。

bruceteen(周星星)的程序可以,不过remove完全可以实现楼主想要的功能。
[解决办法]
常见错误:迭代器失效.
[解决办法]
也来凑热闹
#include <iostream>
#include <list>
using namespace std;

bool equal1 ( int value ) {
return value==1;
}

int main()
{


list <int> listTest;
listTest.push_back(1);
for (int j=1;j <=3;++j){
for (int i=1;i <=5;++i) listTest.push_back(i);
}
listTest.remove_if(equal1);
return 0;
}

[解决办法]
迭代器在容器元素增减后,
原来的迭代器将失效,
请使用 容器操作返回 的迭代器 ~

热点排行