2
int* foo = new int[10];
foo = NULL;
sleep(60);
儀器在上面的代碼中沒有發現任何泄漏,我該如何使用Instrument工具來查找C或C++代碼泄漏。我已經煙囪溢出的大部分的解釋是基於Objective C的代碼...如何使用儀器(泄漏)查找C或C++代碼泄漏 - Xcode?
int* foo = new int[10];
foo = NULL;
sleep(60);
儀器在上面的代碼中沒有發現任何泄漏,我該如何使用Instrument工具來查找C或C++代碼泄漏。我已經煙囪溢出的大部分的解釋是基於Objective C的代碼...如何使用儀器(泄漏)查找C或C++代碼泄漏 - Xcode?
的問題是,編譯器將在下面的代碼片段優化了調用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);
你確定編譯器沒有優化*出*了'new'打電話?嘗試使用'foo'(寫和讀),看看會發生什麼。 – trojanfoe 2013-02-11 12:14:45
好的,顯示實際使用的修改後的代碼*'foo'。 – trojanfoe 2013-02-11 12:22:13
@trojanfoe你說得對,我認爲它的內部優化,當我試圖設置和獲取值,它顯示儀器泄漏。請把這個作爲你的答案。 – Newbee 2013-02-11 12:24:12