1
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,但如果 fetches 的值是img._width,一个unsigned int.

4

1 回答 1

0

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

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

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

于 2016-09-11T20:24:04.880 回答