簡體   English   中英

如何在不引起內存泄漏的情況下將一個動態數組替換為另一個?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM