Сам код выглядит просто отлично.Я могу предложить несколько способов отладки -
- Попробуйте удалить вызов display ().Проблема все еще возникает?(Я бы предположил, что это так).
- Попробуйте выяснить, где в коде CImg есть функция strlen (), которая вызывает ошибку сегментации (с помощью отладчика).Это может дать дополнительные подсказки.
- Если он находится в обработке файла PGM, возможно, предоставленный файл PGM каким-то образом недопустим, и библиотека не обнаруживает ошибки - попробуйте открыть его в каком-либо другом средстве просмотра,и сохранить его снова (как PGM).Если новый работает, сравнение двух может выявить что-то.
Как только у вас будет больше информации, можно сказать больше.
РЕДАКТИРОВАТЬ -
Глядя на дополнительную информацию, которую вы предоставили, и обращаясь к самому коду, кажется, что CImg терпит неудачу при попытке проверить, какой тип файла вы открываете.
Соответствующая строка кода -
if (!cimg::strcmp(ftype,"pnm")) load_pnm(filename);
Это первый раз, когда используется 'ftype', что приводит меня к выводу, что оно имеет недопустимое значение.
'ftype' присваивается значение всего несколькими строками выше-
const char *const ftype = cimg::file_type(0,filename);
Функция file_type () сама пытается угадать, какой файл открыть на основе его заголовка, возможно, из-за того, что открыть его на основании расширения - не удалось.Существует только один разумный способ вернуть недопустимое значение, что впоследствии приведет к сбою strcmp () - когда он не может определить файл как что-либо знакомое ему, он возвращает NULL (фактически 0).
Итак, я повторяю свое предложение, чтобы вы попытались проверить, что это действительно допустимый файл.Я не могу указать вам на какие-либо инструменты, которые способны открывать / сохранять файлы PGM, но я предполагаю, что простой поиск Google поможет.Попробуйте открыть файл и повторно сохранить его как PGM.