У меня проблема с функцией, используемой для чтения формата файла 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);
}
Проблема в том, что ваш входной файл не отформатирован должным образом. У него должно быть достаточно данных, чтобы заполнить charImage, но это не так, и именно поэтому он терпит неудачу. Другая возможность заключается в том, что вы пытаетесь запустить этот код в Windows, и вам нужно открыть файл в двоичном режиме.
В частности (для двоичной части) изменить:
ifp.open(fname, ios::in);
чтобы:
ifp.open(fname, ios::in | ios::binary);
Кроме того, как правило, неуместно приводить результат нового оператора. Здесь это просто избыточно и не имеет никакого смысла.
Все, что использует reinterpret_cast<...>()
выглядит подозрительно для меня, если не сказать больше. Это, вероятно, не корень проблемы, хотя. Мое личное предположение состоит в том, что корень проблемы заключается в запуске кода на компьютере Windows, а не в открытии файла в двоичном режиме. Попробуйте использовать
std::ifstream in("filename", std::ios_base:::binary);
Поскольку код, открывающий файл, не является частью вопроса, это всего лишь дикая догадка.