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。根据documentationimg.width()的返回类型为int,但是如果获取的值为img._width,则为unsigned int

最佳答案

正如GManNickG在评论中提到的那样,在img = &CImg<float>( filename );行创建了CImg<float>类型的临时对象,并将其地址存储在img变量中。该临时对象仅在块内有效:

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


当执行离开此作用域并且您有一些随机内容的无效指针时(例如,-858993460字段中的_width),它会被破坏。

07-24 09:47
查看更多