产生情景:
循环读取文件的时候,每次读到一定大小,程序中断,报错:terminate called after throwing an instance of 'std::length_error' what(): basic_string::_M_create
错误代码:
/*如果文件过大,当文件指针偏移位置大于系统默认文件指针的最大位置,会导致内存错误。64位一般都是大于2G之后出问题,我的环境为银河麒麟,大约300M的时候出现此错误。*/ srcfile.seekg(m_handleFilePara+m_opticalFiberLen, std::ios::cur); //跳过文件控制字和光纤头
替代代码:
char* jumpData = new char[m_handleFilePara+m_opticalFiberLen]; //需要跳过的FPGA文件操作信息和光纤头 while(!jumpData){ jumpData = new char[m_handleFilePara+m_opticalFiberLen]; } srcfile.read(jumpData, m_handleFilePara+m_opticalFiberLen); //跳过文件控制字和光纤头