使用ifstream

时间:2015-10-27 19:22:10

标签: c++ nullpointerexception ifstream

所以我在这段代码中有这个奇怪的“无效空指针”异常(减少到问题的核心)

#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中的某些内容。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

'currentWord'是ZERO(0),当执行reinterpret_cast<char*>(currentWord)时它会使它成为nullptr所以当你尝试写入空地址时,你会得到一个内存写保护错误。< / p>

将其更改为reinterpret_cast<char*>(&currentWord)(请注意&

答案 1 :(得分:1)

您正在使用current_word的值,就像它是指针一样。它不是。这就是当current_word为零时获得空指针地址的原因,当current_word为1时,您在地址1处获得内存异常。使用&current_word作为input.read()的第一个参数{1}}。