Ошибка неверного нулевого указателя при использовании 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

или что-то вдоль строк (число нулей может быть неправильным)

Поиск в Интернете сказал мне, что это связано с тем, что файл пуст (что не так), не найден (не так, как длина получает значение) или что-то в приведении типа mumbo-jumbo. Какие-либо предложения?

2 ответа

Решение

'currentWord' равен нулю (0) и когда reinterpret_cast<char*>(currentWord) выполняется это делает его nullptr поэтому при попытке записи по нулевому адресу вы получите ошибку защиты от записи в память.

измените это на reinterpret_cast<char*>(&currentWord) (Обратите внимание &)

Вы используете значение current_word как будто это указатель. Это не так. Вот почему вы получаете нулевой адрес указателя, когда current_word ноль, и вы получите исключение памяти по адресу 1, когда current_word это 1. Использование &current_word в качестве первого аргумента input.read(),

Другие вопросы по тегам