分配到结构后,我已经达到内存泄漏
struct List {
struct node fNode;
};
struct node {
int key;
};
void listInit(struct List * fList)
{
struct node * temp = malloc(sizeof(struct node));
nodeInit(temp); // set value or something
fList->fnode = *temp;
}
void listEmpty(struct List * flist)
{
nodeEmpty(&flist->fnode);
memset(&flist->fnode, 0, sizzeof(struct node);
free(&flist->fnode);
}
我没有意识到& flist-> fnode地址与malloc返回的临时地址不同。如何从struct List再次访问地址?我无法将属性更改为指针,它必须是结构本身。
答案 0 :(得分:2)
您不需要在列表中分配node
。它是一个普通变量,而不是指针,并在列表的旁边分配。它足以呼叫InitNode(&fList.node)
,它应该可以工作。
然而,也许还有更多的设计工作需要发生,因为它并没有让你在列表中有一个常规节点。
答案 1 :(得分:1)
如果设置了结构,则不应该对malloc进行malloc,而是将其初始化为初始化列表的一部分:
void listInit(struct List * fList) // Must be pointing to a valid list already.
{
nodeInit(&fList->fNode);
}
您的家庭作业所考虑的用例是:
struct List myList; // Automatic ("stack") variable.
listInit(&myList); // The function initializes the variable, it doesn't allocate it