2012-04-21 90 views
0

這聽起來像一個愚蠢的問題的信息,但我找不到如何在這種情況下,適當地釋放內存信息:C++正確的內存釋放沒有關於分配

假設有返回double*(還有一個功能沒有關於此功能的其他信息)。再假設下面的用例:

for (int i = 0; i < SIZE; i++) { 
    double *ptr = new double[3]; 

    /// do something with ptr, e.g., print 

    // delete[] ptr; 
} 

怎樣才能正確地在這種情況下釋放內存,因爲放置在上面的評論一個delete[] ptr;導致回溯(爲什麼?)?

非常感謝!

+2

問題是與代碼'/// /例如,打印'這明顯腐敗的堆 – 2012-04-21 19:45:41

回答

2

double *ptr = new double[3]; 

delete[] ptr; 

是完全正確的。所以你的問題必須在別的地方。我可以推薦使用調試器來檢查發生了什麼,如果你在Linux系統上,我會建議嘗試valgrind/helgrind - 這是相當不錯的

+0

感謝您的信息! – mo5470 2012-04-21 20:34:35

4

有可用於該功能

然後,你可以不知道如何釋放內存沒有其他信息。如果有,請查看函數的源代碼,否則請聯繫作者或使用調試工具來了解它如何分配其內存。原始指針根本不會傳遞必要的信息來知道如何釋放它。

至於你的第二個不相關的案例,delete[]是正確的,所以問題必須在「do something」部分(假設你沒有執行諸如new重載的技巧)。

+0

謝謝您的評論。 我在我的思路中找到了缺失的鏈接,並且在我正在研究的API的文檔中挖掘更多內容,我發現該函數的實現具有void返回類型和out參數double [3]。 – mo5470 2012-04-21 20:39:57