从另一个结构访问结构的指针

时间:2017-04-09 08:16:23

标签: c pointers

分配到结构后,我已经达到内存泄漏

  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再次访问地址?我无法将属性更改为指针,它必须是结构本身。

2 个答案:

答案 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