为什么我的 CImg<float> 的宽度和高度都是负值?

Why does my CImg<float> have negative width and height?

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() 都 return -858993460。根据documentationimg.width()的return类型是int,但是fetches的值是img._width,一个unsigned int.

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

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

当执行离开这个范围时它被破坏并且你有一些随机内容的无效指针(例如 _width 字段中的 -858993460)。