2013-10-10 30 views
1
int a; 
int *b; 
void test(int* target) 
{ 
    delete(target); 
} 
test(new int); // <-- It's ok, of course. 
test(&a); // <-- It raises assertion fail, of course, too. 

鑑於以上代碼。我只知道target是一個指向整數的指針。我怎樣才能說出參數指針的來源?如何判斷指針參數的來源?

+0

你是什麼意思的來源? – Annabelle

+1

你對分配的東西沒有可視性。這取決於你跟蹤。 – Joe

+3

你根本無法可靠地做到這一點。這就是爲什麼手動內存管理很複雜並且最好避免的原因,否則你可能會拋出if(safe_to_delete(ptr))delete ptr;並且很高興。 – us2012

回答

3

無法可靠地判斷指針是否指向內存的有效動態分配部分的開始位置。

這就是爲什麼手動內存管理首先是複雜的 - 對於您動態分配的所有內容,您需要正確定義由誰負責創建以及由誰負責刪除。獲得這個錯誤會導致未定義的行爲,段錯誤和所有其他類型的難以追蹤的錯誤。請記住,雖然C++爲您提供了大量工具(RAII,智能指針等),除了少數幾種情況外,這些工具可以使手動內存管理變得不必要。