2009-10-28 93 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固定它。