2013-02-11 47 views
2
int* foo = new int[10]; 
foo = NULL; 
sleep(60); 

儀器在上面的代碼中沒有發現任何泄漏,我該如何使用Instrument工具來查找C或C++代碼泄漏。我已經煙囪溢出的大部分的解釋是基於Objective C的代碼...如何使用儀器(泄漏)查找C或C++代碼泄漏 - Xcode?

+1

你確定編譯器沒有優化*出*了'new'打電話?嘗試使用'foo'(寫和讀),看看會發生什麼。 – trojanfoe 2013-02-11 12:14:45

+0

好的,顯示實際使用的修改後的代碼*'foo'。 – trojanfoe 2013-02-11 12:22:13

+0

@trojanfoe你說得對,我認爲它的內部優化,當我試圖設置和獲取值,它顯示儀器泄漏。請把這個作爲你的答案。 – Newbee 2013-02-11 12:24:12

回答

3

的問題是,編譯器將在下面的代碼片段優化了調用new

int* foo = new int[10]; 
foo = NULL; 
sleep(60); 

,因爲它是足夠聰明知道它沒有被使用。如果您添加的代碼使用foo那麼編譯器將無法做到這一點,你應該看到泄漏你期望:

int* foo = new int[10]; 

foo[3] = 23; 
foo[8] = 45; 

printf("%d %d\n", foo[3], foo[8]); 

foo = NULL; 
sleep(60);