2

我有一个用 delete 释放的对象,char*它的析构函数中有一个用 free 释放的对象。我使用 free 的原因是因为我使用了 strdup 并malloc创建了char指针。我使用的原因malloc是因为我在大多数代码路径中都使用了 strdup。这种情况会导致内存损坏吗?

4

4 回答 4

5

不,如果您正确匹配调用,即free()分配的内存malloc()和分配delete的内存new,它将正常工作。

于 2009-10-28T08:40:46.950 回答
2

你在做什么是正确的。一个已经被newed 的类应该用 释放delete,但是如果它拥有用malloc(直接或间接)分配的内存,那么它应该用 释放该内存free

于 2009-10-28T08:42:16.390 回答
1

你的实现是正确的。您使用 free() 释放使用 malloc()(或 strdup())分配的内存,这正是要做的。

要求是您使用与用于分配该内存的原语匹配的原语释放内存。并且在您的实施中满足了此要求。

于 2009-10-28T08:55:40.277 回答
0

我发现出了什么问题。我通过一个方法将我的对象作为副本传递,并且它保留了char*交叉;当函数退出时,该临时对象被删除,释放char*. 现在我需要char*方法退出后的方法,但现在已经消失了。两个*和减一个固定它。

于 2014-08-11T08:47:13.263 回答