这是我的代码:
ifstream ifile;
list<unsigned char> fbinary;
ifile.open(filename, ios::binary);
if (ifile.fail() || !ifile.is_open())
return false;
ifile.seekg(0, ios::end);
int sz = ifile.tellg();
if (sz <= 0)
return false;
try
{
//Get Binary And Encrypt with XOR
ifile.seekg(0, ios::beg);
unsigned char temp = 0;
while (ifile)
{
ifile.read((char*)temp, sizeof(unsigned char));
temp ^= Encrypt_Key;
fbinary.push_back(temp);
}
ifile.close();
}
...
file.open
并获取文件大小不会失败。我不知道为什么ifile.read()
会触发调试断言。
错误消息:
表达式:缓冲区!= nullptr
答案 0 :(得分:1)
目前尚不清楚buffer
是什么(它可能是标准库实现中的变量),但是问题中的代码至少存在一个明显的错误:
unsigned char temp = 0;
...
ifile.read((char*)temp, sizeof(unsigned char));
在这里,您首先用0初始化temp
,然后将其转换为指针,该指针实际上是一个空指针。用空指针调用.read()
是UB-在位置(char*)temp (= nullptr)
上没有有效的内存缓冲区。
您想要的可能是这样:
char temp;
...
ifile.read(&temp, sizeof(char));
您将temp
的有效地址传递到.read()
中。
还要注意,从tellg()
获取文件大小可能会导致错误的结果。参见this question。
答案 1 :(得分:-4)
在尝试开始之前,在try块内尝试调用ifile.clear():
尝试 { //呼叫清除 ifile.clear(); //使用XOR获取二进制文件并加密 ifile.seekg(0,ios :: beg); 无符号字符温度= 0; 而(ifile) {