2012-04-12 21 views
0

哇,我真的完全不知道這裏到底發生了什麼。這真讓我難以置信。我有這種方法,我試圖去工作(東西似乎隨機在沒有變化的地方在這裏),我評論了部分,所以我可以讓它工作在最低限度。我的論點正在損壞?

Font* ResourceLoader::getFont(const std::string &name, int size) { 
size = size; 
//for(std::list<std::string>::iterator itr = mPaths.begin(); itr != mPaths.end(); itr++) { 
    //if(fileExists((*itr)+name)) { 
     std::string filename(name); 
     TTF_Font *font = TTF_OpenFont(filename.c_str(), size); 
     TTF_SetFontHinting(font, TTF_HINTING_MONO); 
     std::string err = std::string(TTF_GetError()); 

     Font* result = new Font(font); 

     return result; 
    //} 
//} 

return NULL; 
} 

我的問題是「大小」參數通過該方法被損壞。這裏是什麼樣子

enter image description here

+1

您是否嘗試過使用[valgrind](http://valgrind.org)或其他內存調試工具?機會很好,這個問題不在你選擇向我們展示的代碼中。 – 2012-04-12 19:25:54

+0

你的方法開始處的size = size是什麼? – 2012-04-12 19:27:48

+0

假設你在Linux上(通過這些截圖),嘗試使用Valgrind,Electric Fence,dmalloc等來幫助你找到摧毀你的記憶的代碼。 – 2012-04-12 19:28:50

回答

1

關閉編譯器優化,看看這是否仍然發生。

我的猜測是size參數存儲被編譯器優化了,因爲它沒有在函數中使用,所以調試器會顯示垃圾數據。

別的東西,你可以嘗試看看,如果這是發生了什麼事是每行

std::cout << "size at line " << __LINE__ << ": " << size << std::endl; 

我打賭的size值將停止改變後打印出的功能size參數。

PS。我只注意到你在其中一個函數調用中使用size。試試打印出它的值。另外,爲什麼你在函數的頂部有size = size;聲明?你想用這個來完成什麼?

PPS。要解決您的訪問違規問題 - 請務必在嘗試下游使用之前檢查font的值。

+0

'size'正被傳遞給'TTF_OpenFont' ... – ildjarn 2012-04-12 19:29:45

+0

@ildjarn是的,我剛剛注意到了 - 請參閱編輯。不過,它可能會在通話結束後進行優化。 – 2012-04-12 19:32:20

+0

我把尺寸=大小,因爲VS不會顯示大小的值,而調試器是在我已註釋的兩條線上。我已經刪除它。我把你的代碼片段放在TTF_OpenFont前後的值保持不變。問題在於字體未被加載。我真的很討厭SDL_TTF,它很挑剔它可以加載什麼字體,並且不能加載 – rcapote 2012-04-12 19:41:15