链表顺序插入和内存泄漏

时间:2014-02-23 12:31:19

标签: c memory-leaks linked-list

在链接列表的函数内:

// nodePtr is a pointer to a struct
// list is a pointer to the linked list
nodePtr *current = list;

[some manipulation using *current here...]

// insert new node in front of *current node
nodePtr temp = *current;
*current = createNode(value);
(*current)->next = temp;

因为temp不是直接指针所以当我分配(* current) - >接下来回到temp时,它会在堆中创建一个副本吗?然后原始内存现在没有指向它并泄露?

我试图为链接列表设置插入函数,按顺序插入节点(struct中的成员检查值),因此不需要排序。

3 个答案:

答案 0 :(得分:0)

  

它会在堆中创建一个副本吗?

当您将一个指针指定给另一个指针时,堆上不会分配额外的内存。

答案 1 :(得分:0)

如果nodePtr是指向结构的指针(我假设你是typedef nodePtr),那么你已经将current定义为指向结构的指针。 Current has to be initialised with a pointer to type nodePtr not a pointer to the struct.

nodePtr current = list //this should work

答案 2 :(得分:0)

nodePtr temp;

此行为堆栈(非堆)中的“temp”变量分配内存。它只是一个指针变量,可以存储您在某处键入的结构的地址。

此外,此代码中不会泄漏。或许,您可以为创建新节点分配内存,然后将其存储在(* current) - > next。

由于nodePtr已经是指针类型, current 是一个双指针。所以我认为,这是不相容的

nodePtr *current = list;

应该是

nodePtr *current = &list;