首先,你不释放内存是SimpleXy * 链接 * myList
,而不是simpleXyList里面的内存(你释放由就好简称内存)。
一般情况下,您需要找出一种方法来释放您正在使用的所有内存。在一般情况下,你会释放引用它,因为在结构之前参照的数据:(仅C++)
void FreeSimpleXy(SimpleXyLink *myList) {
free(myList->simpleXyList);
free(myList);
}
但是请注意,如果你使用的new
来分配这些,你绝反而使用delete来释放!
如果您使用的是C++,还有更简单的方法。首先是析构函数。你可以改变SimpleXyLink
像这样:
struct SimpleXyLink
{
int num_xy;
SimpleXY *simpleXyList;
~SimpleXyLink() {
delete simpleXyList;
}
SimpleXyLink() {
simpleXyList = NULL; // run when object is created with new
}
};
现在,你可以做delete someLink;
,它会自动释放所包含simpleXyList。 然而,记住,你不得使用malloc
和free
现在 - 用new
和delete
代替:
SimpleXyLink *link = new SimpleXyLink;
link->simpleXyList = new SimpleXYList;
delete link; // all gone!
最后,还有做事的一个更近于神奇的方式 - 使用智能指针(也C++)。这些将被添加到下一个版本的C++中,但您可以通过使用boost library来使用它们。
struct SimpleXyLink {
int num_xy;
boost::scoped_ptr<SimpleXyList> simpleXyList; // or shared_ptr
};
这将消除需要编写一个析构函数(你仍然必须使用new
和delete
但是!),但他们随身携带的其他限制也是如此。阅读我在使用前仔细链接的文档,如果您还不确定,请随时打开另一个问题。
您标记这个`C++`但使用`free`(大概`malloc`)您是指用这个`c`来代替? – KitsuneYMG 2011-01-13 14:02:58
@KitsuneTYMG,我想任何一个都可以。但无论如何,我已将标签更改为`c` – Graviton 2011-01-13 14:03:44
就像你从答案中可以看到的那样,如果你标记为'C++`并且使用'free',人们会对你想要的感到困惑。尽管`free`在C++编译器中工作正常,但在C++中分配的方式是``new` – KitsuneYMG 2011-01-13 14:06:57