2009-10-28 42 views
2

我有一個對象,我釋放與刪除,並且它有一個char*它在析構函數中免費釋放。我使用免費的原因是因爲我用strdup和malloc創建了char指針。我使用malloc的原因是因爲我在大多數代碼路徑中使用了strdup。這種情況會導致內存損壞嗎?使用免費刪除對象釋放內部對象

+0

我認爲這裏有一個誤解,你的對象只包含一個指向實際存儲字符的另一個存儲區。因此你不能釋放對象所包含的內存,所以一切都很好。 – 2009-10-28 09:02:35

+0

我不認爲應該有問題,但是在做這件事時你有沒有遇到任何問題?好奇。 – 2009-10-28 09:09:28

+0

您應該提及您如何分配/初始化包含指針的對象。 – sellibitze 2009-10-28 09:09:49

回答

5

不,如果你正確匹配呼叫,即free()分配給malloc()delete的內存分配給new的內存,它會正常工作。

2

你在做什麼是正確的。一個new ed類應該被釋放delete,但是如果它擁有分配了malloc(直接或間接)的內存,則它應該使用free釋放該內存。

1

您的實施是正確的。您可以使用free()釋放分配給malloc()(或strdup())的內存,這正是要做的。

要求是您釋放內存時使用了與用於分配內存的內存匹配的內存。這個要求在你的實現中得到滿足。

0

我想通了什麼是錯的。我通過一種方法將我的對象作爲副本傳遞,並保持char*不變;當函數退出時,該臨時對象被刪除,釋放了char*。現在我需要char*方法退出後,但現在已經消失。兩個*的和減1固定它。