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

#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


或沿线模糊(零位数可能不正确)

网络搜索告诉我,这与文件为空(不是这种情况),找不到文件(由于长度获取值也不是这种情况)或类型转换为Mumbo-jumbo有关。有什么建议么?

最佳答案

“ currentWord”为零(0),当执行reinterpret_cast<char*>(currentWord)时,它使其成为nullptr,因此当您尝试写入空地址时,您将收到内存写保护错误。

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

关于c++ - 使用ifstream时无效的空指针错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33376774/

10-09 01:11