[英]How to replace one dynamic array with another without causing memory leak?
這是一個簡單的問題,我是一個初學者,但我想確認一下。
假設我有一個類對象int * data,它指向5個int數組。 說我有一個函數,它將用5個參數替換數據,如下所示。
void replaceData(int a, int b, int c, int d, int e){
int * temp = new int[5];
temp[0] = a;
temp[1] = b;
temp[2] = c;
temp[3] = d;
temp[4] = e;
data = temp;
}
我擔心這會導致內存泄漏,因為如果數據中已經有5個int,它們仍然會在周圍浮動。 我很想通過以下方式更改它以避免這種情況:
void replaceData(int a, int b, int c, int d, int e){
int * temp = new int[5];
temp[0] = a;
temp[1] = b;
temp[2] = c;
temp[3] = d;
temp[4] = e;
delete data; //would this prevent a memory leak?
data = temp;
temp = 0;
}
非常感謝您的投入!
如果以與分配temp
相同的方式分配data
,則是,您將需要先釋放舊數組,然后再修改指針-否則會發生內存泄漏。
請注意,如果您分配一個數組( new int[5]
),則必須像這樣釋放數組:
delete[] data;
另外,最好使用像std::vector
這樣的STL容器,而不是手動分配數組,因為所有內存管理都是為您處理的。
幾乎。
delete
運算符用於指向單個對象的指針。 您需要執行delete[] data
才能起作用。 最后將臨時指針清零沒有任何區別。
如果您的代碼是delete[]
而不是delete
那么它將是正確的。 如果大小是硬編碼的,那么使用動態分配的數組毫無意義(至少在這種情況下不是這樣)。 只需使用int temp[5];
。
更好的是,只使用向量。 然后,這是對std::swap
的簡單調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.