读书人

不过就是读出100万对数而已竟然out_

发布时间: 2012-02-23 22:01:35 作者: rapoo

不过就是读出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进行了操作.

读书人网 >C++

热点推荐