我正在研究insert_node函数,以将节点添加到链表。节点的结构如下所示:
首先,该函数会产生内存泄漏
prior_node = (Node *)malloc(sizeof(Node));
这个while循环
while(newNodePtr->grocery_item.stockNumber > traversePtr->grocery_item.stockNumber && traversePtr->next != NULL) {
prior_node = traversePtr;
traversePtr = traversePtr->next;
}
可以调用未定义的行为,因为没有检查指针traversePtr
的当前值是否等于NULL。
可以用下面的方法更简单地定义函数。
void insert_node( Node **list_head_ptr, Node *newNodePtr )
{
while ( *list_head_ptr != NULL &&
!( newNodePtr->grocery_item.stockNumber < (*list_head_ptr)->grocery_item.stockNumber ) )
{
list_head_ptr = &( *list_head_ptr )->next;
}
newNodePtr->next = *list_head_ptr;
*list_head_ptr = newNodePtr;
}