在使用delete释放的对象的析构函数中使用free
-
06-07-2019 - |
题
我有一个对象,我可以使用delete释放它,它有一个 char *
,它在析构函数中被释放。我使用free的原因是因为我在创建 char
指针时使用了strdup和 malloc
。我使用 malloc
的原因是因为我在大多数代码路径中都使用了strdup。这种情况会导致内存损坏吗?
解决方案
不,如果你正确匹配调用,即 free()
为 malloc()
和 delete
分配的内存,用于分配的内存>新
,它会正常工作。
其他提示
你在做什么是正确的。已经 new
ed的类应该使用 delete
取消分配,但是如果它拥有使用 malloc
(直接或间接)分配的内存那么它应该用 free
解除内存。
您的实施是正确的。你使用free()释放用malloc()(或strdup())分配的内存,这正是要做的事情。
要求是使用与用于分配该内存的原语匹配的原语释放内存。这个要求在您的实施中得到满足。
我弄清楚出了什么问题。我通过方法传递我的对象作为副本,并保持 char *
;当函数退出时,该临时对象被删除,释放 char *
。现在我退出方法后需要 char *
,但现在已经消失了。两个 *
和减去一个修复它。
不隶属于 StackOverflow