不过就是读出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进行了操作.
我要从一个文件中所有的数据,文件有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进行了操作.