_Myt& __CLR_OR_THIS_CALL getline(_Elem *_Str,
streamsize _Count, _Elem _Delim)
{ // get up to _Count characters into NTCS, discard _Delim
_DEBUG_POINTER(_Str);
ios_base::iostate _State = ios_base::goodbit;
_Chcount = 0;
const sentry _Ok(*this, true);
if (_Ok && 0 < _Count)
{ // state okay, use facet to extract
int_type _Metadelim = _Traits::to_int_type(_Delim);
_TRY_IO_BEGIN
int_type _Meta = _Myios::rdbuf()->sgetc();
for (; ; _Meta = _Myios::rdbuf()->snextc())
if (_Traits::eq_int_type(_Traits::eof(), _Meta))
{ // end of file, quit
_State |= ios_base::eofbit;
break;
}
else if (_Meta == _Metadelim)
{ // got a delimiter, discard it and quit
++_Chcount;
_Myios::rdbuf()->sbumpc();
break;
}
else if (--_Count <= 0)
{ // buffer full, quit
_State |= ios_base::failbit;
break;
}
else
{ // got a character, add it to string
++_Chcount;
*_Str++ = _Traits::to_char_type(_Meta);
}
_CATCH_IO_END
}
*_Str = _Elem(); // add terminating null character
_Myios::setstate(_Chcount == 0 ? _State | ios_base::failbit : _State);
return (*this);
}
你读到一个大于10个字符的行时,由逻辑
else if (--_Count <= 0)
{ // buffer full, quit
_State |= ios_base::failbit;
break;
}
会将文件的_State置为ios_base::failbit,从而_Ok变成false
而后再继续getline时,_Ok将会一直为false,而getline会一直返回空串,在while中陷入死循环。内存被耗尽。
解决方法:
将getline 的参数 加大 ,如我改成 inf.getline(line,100) .这样只要output.txt文本内容中每一行,字符个数小于100就OK。
另外,
http://www.cnblogs.com/chenrj/archive/2009/05/31/1492963.html
提供了一种方法,我测试貌似不成功。大家不妨试试。得出结果的说一声啊。
参考:
http://topic.csdn.net/u/20100727/21/25aed228-8d56-4039-a6ad-92cf0db12f71.html?seed=1049743516&r=67302332#r_67302332
http://www.cnblogs.com/chenrj/archive/2009/05/31/1492963.html
声明:本文档可以随意更改,但必须署名原作者
作者:凤凰舞者 qq:578989855
您想拥有和网易免费邮箱一样强大的软件吗?