在链接列表的函数内:
// 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中的成员检查值),因此不需要排序。
答案 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;