不过就是读出100万对数而已,竟然out_of_range at memory解决办法

不过就是读出100万对数而已,竟然out_of_range at memory
我要从一个文件中所有的数据,文件有100万行,每行2个数,用空格隔开。
代码如下:

ifstream   infile( "in.txt ",   ios::in);
int   ii   =   0;
while(!infile.eof()){
infile.getline(linemem,   20);
readline   =   linemem;
int   spacepos   =   readline.find( "   ",   0);
start1   =   atol(readline.substr(0,     spacepos).c_str());
end1   =   atol(readline.substr(spacepos,   20   -   spacepos).c_str());
if   (start1> end1)   {long   tp   =   start1;   start1   =   end1;   end1   =   tp;}

}

大家看看我的代码,除了读数之外几乎没有任何别的操作。但是运行之后大概2分钟的时候就出现错误:
Unhandled   exception   at   0x7c812a5b   in   wrap.exe:   Microsoft   C++   exception:   std::out_of_range   at   memory   location   0x0012fdec..

请教大家怎么把我的程序优化一下,让它不出现这个错误?


------解决方案--------------------
直接
int start,end;

infile > > start > > end;即可
------解决方案--------------------
不是优化的事情,是你的程序没有进行错误判断

即使2楼的程序也不见得是能处理错误的。

从你的要求,每行两个数空格隔开,那么你应该忽略掉不足两个数的行。

另外,spacepos, 20 - spacepos这里的逻辑有问题,你不应该使用20这个莫名奇妙的常量。
------解决方案--------------------
判断一下读取数据是否成功:
//....
infile.getline(linemem, 20);
if(infile.fail())//加判断一下读取数据是否成功:
break;
readline = linemem;

可能是最后一次读取出错了,没读取到数据,你仍然对readline进行了操作.