Почему мой CImg<float> имеет отрицательную ширину и высоту?

CImg<float>* img = NULL;
bool loaded;

while ( !loaded )
{
    loaded = true;
    try
    {
        img = &CImg<float>( filename );
    }
    catch ( CImgException )
    {
        loaded = false;
        fprintf( stdout, "ERROR: could not load %smap file.\n", mapname );
    }
}

Когда я ввожу правильное имя файла изображения, которое CImg может найти и прочитать, img.width() а также img.height() оба возвращаются -858993460, Согласно документации, img.width()возвращаемый тип int, но значение при получении img._width, unsigned int,

1 ответ

Решение

Как упоминалось в комментарии GManNickG, в строке img = &CImg<float>( filename ); временный объект типа CImg<float> создан и хранит его адрес в img переменная. Этот временный объект действителен только внутри блока:

try
{
  img = &CImg<float>( filename );
}

Он разрушается, когда выполнение выходит из этой области, и у вас есть недопустимый указатель со случайным содержимым (например, -858993460 в _width поле).

Другие вопросы по тегам