我使用MFC-Serialize函数来读取/存储一些值。如果我捕捉到错误的文件名,应用程序就会崩溃。
我看到这通常是因为,它试图读取超出CArchive (文件)结尾的内容,并返回一些单元化的值。
如何检查CArchive在解压后是否仍然有效?或者到达CArchive的末尾。与ifstrem类似,如果( is )是>> tmp。
std::vector<double> m_vecPoint;
void CTestDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{ // Store
int AnzT = m_vecPoint.size();
ar << AnzT;
for (int i = 0; i < AnzT *&& *ar.isGood()*/; i++)
{
ar << m_vecPoint.at(i);
}
}
else
{ // Read
int AnzT(0);
ar >> AnzT;
for (int i = 0; i < AnzT; i++)
{
double pt;
ar >> pt;
m_vecPoint.push_back(pt); // crash occurs here (how to validate pt?) }
}
}发布于 2016-08-13 03:15:47
以避免从CArchive提取时出现浮点异常(尽管尝试,但编程人员崩溃,捕获处理程序)。现在,我通过在CString中转换浮点数/双精度数并在>>和<<操作符中使用ar.Write/ReadString(str)来避免这种情况。
inline Archive& operator<<(CArchive& ar, const CMyPoint& val)
{
tostringstream os;
const TCHAR kSep = _T(' ');
os << val.m_fTemperatur1 << kSep;
os << val.m_fTemperatur2 << kSep;
ar.WriteString(os.str().c_str());
return ar;
}
inline CArchive& operator >> (CArchive& ar, CMyPoint& val)
{
CString str;
ar.ReadString(str);
tistringstream is((LPCTSTR)str);
tstring sep;
is >> val.m_fT1 >> sep;
is >> val.m_fT2 >> sep;
return ar;
}https://stackoverflow.com/questions/38920185
复制相似问题