我有一個對象,我釋放與刪除,並且它有一個char*
它在析構函數中免費釋放。我使用免費的原因是因爲我用strdup和malloc
創建了char
指針。我使用malloc
的原因是因爲我在大多數代碼路徑中使用了strdup。這種情況會導致內存損壞嗎?使用免費刪除對象釋放內部對象
2
A
回答
5
不,如果你正確匹配呼叫,即free()
分配給malloc()
和delete
的內存分配給new
的內存,它會正常工作。
2
你在做什麼是正確的。一個new
ed類應該被釋放delete
,但是如果它擁有分配了malloc
(直接或間接)的內存,則它應該使用free
釋放該內存。
1
您的實施是正確的。您可以使用free()釋放分配給malloc()(或strdup())的內存,這正是要做的。
要求是您釋放內存時使用了與用於分配內存的內存匹配的內存。這個要求在你的實現中得到滿足。
0
我想通了什麼是錯的。我通過一種方法將我的對象作爲副本傳遞,並保持char*
不變;當函數退出時,該臨時對象被刪除,釋放了char*
。現在我需要char*
方法退出後,但現在已經消失。兩個*
的和減1固定它。
相關問題
- 1. 釋放對象內存中的對象
- 2. 塊內釋放對象
- 3. 釋放對象的內存
- 4. 釋放對象
- 5. 如何從對象數組中刪除(釋放內存)對象(動態內存對象分配)
- 6. 免費橋接對象,保留並釋放
- 7. 對對象使用保留和釋放
- 8. 免費本地對象
- 9. 呼叫TObject.GetInterface免費對象
- 10. 已刪除的內部C++對象(pyside)
- 11. PHP刪除對象的內部數組
- 12. Python PySide(已刪除內部C++對象)
- 13. 免費()不釋放內存?
- 14. 釋放PyTuple對象
- 15. 的釋放對象
- 16. 釋放ABMultiValueRef對象
- 17. 對象不釋放
- 18. Segfault當我刪除一個對象 - GDB說在免費()
- 19. 使用NSPredicate刪除對象
- 20. 對象內部的對象
- 21. 刪除對象
- 22. 刪除對象
- 23. 刪除[]對象
- 24. 刪除對象
- 25. Android垃圾回收器,釋放對象內的對象
- 26. 泄漏內存,釋放對象和對象「複製」
- 27. 避免刪除子對象 - 境界
- 28. 對象釋放後對象是否安全使用?
- 29. 靜態對象內存釋放
- 30. 在C++中釋放對象的內存
我認爲這裏有一個誤解,你的對象只包含一個指向實際存儲字符的另一個存儲區。因此你不能釋放對象所包含的內存,所以一切都很好。 – 2009-10-28 09:02:35
我不認爲應該有問題,但是在做這件事時你有沒有遇到任何問題?好奇。 – 2009-10-28 09:09:28
您應該提及您如何分配/初始化包含指針的對象。 – sellibitze 2009-10-28 09:09:49