首先,你不釋放內存是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