考慮下面的代碼片段誰負責釋放分配的內存?
void xyz(CString **mapping)
{
*mappings = new CString[10];
(*mappings)[0] = "hello";
//...
}
void main(int argc, char **argv)
{
CString *tmp;
xyz(&tmp);
// now we have the CString array defined in xyz
}
我想要做的是,以填補因主峯的VAR與由另一個函數生成一些值。我讀了它的最佳做法,即刪除/釋放與分配的功能相同的功能。這在這種情況下是不可能的,因爲xyz
存在的唯一原因是生成數據(這僅僅是一個例子,在實際情況下,在xyz ;
中會有更多複雜性))。我也考慮在main中的堆棧上創建一個數組,並將它傳遞給函數,但在我的情況下,數組的大小在當時不是固定的(它在xyz
中確定)。清理分配內存的最乾淨和最常用的方法是什麼? 如果我們有方法xyz
的對象,那麼最佳實踐是什麼?要創建另一個方法(例如freeMapping()
),在處理數據後必須由調用方調用?
C或C++,決定。因爲在C++中,你只需使用'std :: vector'。 – 2012-03-13 23:04:05
如果您正在研究C++,那麼將分配的數據包裝到一個對象中,該對象在超出範圍時釋放內存。 – Tony 2012-03-13 23:04:09
上次編輯將問題從C++改爲C,這會使答案失效。如果您有新問題,請在網站上進行搜索,如果失敗(不會),請提出新問題。 – 2015-05-11 18:29:07