为什么我的CImg <float>具有负宽度和高度?

时间:2016-09-11 20:15:16

标签: c++ size dimension cimg negative-integer

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。根据{{​​3}},img.width()的返回类型为int,但提取的值为img._widthunsigned int

1 个答案:

答案 0 :(得分:0)

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

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

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