2016-09-11 33 views
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。根據documentation,img.width()的返回類型爲int,但取值爲img._width,unsigned int爲什麼我的CImg <float>具有負寬度和高度?

+1

這是您的真實密碼?你不能接受臨時地址。 – GManNickG

回答

0

由於GManNickG在註釋中提到,在img = &CImg<float>(filename);處創建了CImg<float>類型的臨時對象,並將其地址存儲到img變量中。這個臨時對象只是塊內纔有效:

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

在執行離開此範圍內它的破壞和你有無效的指針與一些隨機的內容(例如-858993460_width場)。

+0

如果我使用'new',它將被分配在堆上,是否有辦法初始化一個對象實例並讓它屬於(例如)這個方法被調用的範圍?我所關注的指針上沒有任何引用涉及到這一點。 – ophilbinbriscoe

+0

@ophilbinbriscoe'CImg 'class has [copy constructor](http://cimg.eu/reference/structcimg__library_1_1CImg.html#aff97beaa34b9061351711dcdaed85c58)and ['move_to'](http://cimg.eu/reference/structcimg__library_1_1CImg.html #a09aeb03ffe6512209f64b92fbef9574c)方法。你可以聲明'img'爲'CImg img;'並簡單地指定'img = CImg (filename);' – Nikita

相關問題