Если поток не работает по неизвестной причине

У меня проблема с функцией, используемой для чтения формата файла pgm в память.

Я использовал источники в следующей ссылке http://www.cse.unr.edu/~bebis/CS308/Code/ReadImage.cpp . Вы можете найти других в том же каталоге; и некоторые инструкции в CS308; если вы заинтересованы .

Проблема в том, что если ifstream не работает; и я думаю, что этот кусок кода может быть причиной; но это выглядит хорошо со мной.

Любые идеи будут оценены

charImage = (unsigned char *) new unsigned char [M*N];

ifp.read( reinterpret_cast<char *>(charImage), (M*N)*sizeof(unsigned char));

if (ifp.fail()) {
cout << "Image " << fname << " has wrong size" << endl;
exit(1);
}

0

Решение

Проблема в том, что ваш входной файл не отформатирован должным образом. У него должно быть достаточно данных, чтобы заполнить charImage, но это не так, и именно поэтому он терпит неудачу. Другая возможность заключается в том, что вы пытаетесь запустить этот код в Windows, и вам нужно открыть файл в двоичном режиме.

В частности (для двоичной части) изменить:

 ifp.open(fname, ios::in);

чтобы:

 ifp.open(fname, ios::in | ios::binary);

Кроме того, как правило, неуместно приводить результат нового оператора. Здесь это просто избыточно и не имеет никакого смысла.

1

Другие решения

Все, что использует reinterpret_cast<...>() выглядит подозрительно для меня, если не сказать больше. Это, вероятно, не корень проблемы, хотя. Мое личное предположение состоит в том, что корень проблемы заключается в запуске кода на компьютере Windows, а не в открытии файла в двоичном режиме. Попробуйте использовать

std::ifstream in("filename", std::ios_base:::binary);

Поскольку код, открывающий файл, не является частью вопроса, это всего лишь дикая догадка.

1

По вопросам рекламы [email protected]