Ошибка неверного нулевого указателя при использовании 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*>(¤tWord)
(Обратите внимание &
)
Вы используете значение current_word
как будто это указатель. Это не так. Вот почему вы получаете нулевой адрес указателя, когда current_word
ноль, и вы получите исключение памяти по адресу 1, когда current_word
это 1. Использование ¤t_word
в качестве первого аргумента input.read()
,