Почему мой CImg & lt; float & gt; имеют отрицательную ширину и высоту?

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 поле).

0

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

Других решений пока нет …

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