Кто-нибудь здесь знает, как указатель get в C ++ может быть поврежден после вызова read ()? Я вижу действительно странное поведение, которое я не могу объяснить. Например (иллюстративный код, а не то, что я на самом деле запускаю):
int main()
{
// datafile.bin is a 2MB binary file...
std::ifstream ifs( "datafile.bin", ios::binary );
ifs.exceptions ( ifstream::eofbit | ifstream::failbit | ifstream::badbit );
int data[100];
std::istream::pos_type current_pos = ifs.tellg();
// current_pos = 0, as you'd expect...
ifs.read( reinterpret_cast<char*>(data), 100 * sizeof(int) );
// throws no exception, so no error bits set...
std::streamsize bytes_read = ifs.gcount();
// gives 400, as you'd expect...
current_pos = ifs.tellg();
// current_pos = 0x1e1a or something similarly daft
return 0;
}
В моем примере показано чтение массива, но это происходит даже при чтении отдельных значений встроенных типов; указатель get перед чтением корректен, вызов gcount () сообщает о правильном количестве прочитанных байтов, но после этого указатель get становится совершенно неверным. Этого не происходит с каждым вызовом read () - иногда я прохожу их до того, как один из них закончится. Что может быть обезьяной с указателем get? Я делаю что-то глубоко глупое?
Любая помощь очень ценится ...
Simon