所以我在这段代码中有这个奇怪的“无效空指针”异常(减少到问题的核心)
#include <fstream>
#include <iostream>
#include <iomanip>
int main(){
std::ifstream input;
std::ofstream output;
unsigned __int16 currentWord = 0;
output.open("log.txt");
input.open("D:\\Work\\REC022M0007.asf", std::ios::binary);
input.seekg(0, input.end);
int length = input.tellg();
input.seekg(0, input.beg);
for (int i = 0; i < length;){
int numData = 0;
input.read(reinterpret_cast<char *>(currentWord), sizeof(currentWord));
}
input.close();
output.close();
return 0;
}
让我异常的一行是
input.read(reinterpret_cast<char *>(currentWord), sizeof(currentWord));
并且它在第一次浏览时就这样做了,所以它不像我试图进一步读取文件,而不是它。
当我尝试将currentWord
的值更改为1时,我会得到像
trying to write to memory 0x0000001
沿着线或smth(零的数量可能不正确)
网络搜索告诉我,无论是文件是空的(事实并非如此),都没有找到(也没有找到(因为长度获得价值)或类型转换mumbo-jumbo中的某些内容。有什么建议吗?
答案 0 :(得分:2)
'currentWord'是ZERO(0),当执行reinterpret_cast<char*>(currentWord)
时它会使它成为nullptr
所以当你尝试写入空地址时,你会得到一个内存写保护错误。< / p>
将其更改为reinterpret_cast<char*>(¤tWord)
(请注意&
)
答案 1 :(得分:1)
您正在使用current_word
的值,就像它是指针一样。它不是。这就是当current_word
为零时获得空指针地址的原因,当current_word
为1时,您在地址1处获得内存异常。使用¤t_word
作为input.read()
的第一个参数{1}}。