/** Finish the memory test. @param[in] This The protocol instance pointer. @retval EFI_SUCCESS Success. All resources used in the memory test are freed. **/ EFI_STATUS EFIAPI GenMemoryTestFinished ( IN EFI_GENERIC_MEMORY_TEST_PROTOCOL *This ) { EFI_STATUS Status; GENERIC_MEMORY_TEST_PRIVATE *Private; Private = GENERIC_MEMORY_TEST_PRIVATE_FROM_THIS (This); // // Perform Data and Address line test // Status = PerformAddressDataLineTest (Private); ASSERT_EFI_ERROR (Status); // // Add the non tested memory range to system memory map through GCD service // UpdateMemoryMap (Private); // // we need to free all the memory allocate // DestroyLinkList (Private); return EFI_SUCCESS; }
void DestroyLinkList(link_node *Link) { if(Link) { if(Link->Next) DestroyLinkList(Link->Next); free(Link); Link = NULL; } }
// Ö÷º¯Êý int main(void) { int pos; printf("TEST 1...\n"); LinkList *plist = CreateLinkList( ); // 创建单链表 for(int pos = 0; pos < LIST_SIZE; pos++) // 循环向单链表中插入数据 { InsertNode(plist, pos, pos + 1); } ShowList(plist); // 插入结束后显示单链表的信息 DeleteNode(plist, 0); // 删除第一个元素 ShowList(plist); DeleteNode(plist, 1); // 删除第二个元素 ShowList(plist); ClearLinkList(plist); // 将单链表清空 ShowList(plist); DestroyLinkList(plist); // 将单链表销毁 plist = NULL; printf("\n\nTEST 2...\n"); LinkList list; InitLinkList(&list); // 初始化单链表 for(int pos = 0; pos < LIST_SIZE; pos++) // 训话向单链表中插入数据 { InsertNode(&list, pos, pos + 1); } ShowList(&list); // 显示单链表 ClearLinkList(&list); // 清空单链表 // FinitLinkList(&list); // ERROR== list->m_head->m_next == NULL ShowList(&list); printf("\n\nTEST 3...\n"); LinkListNode *prevNode = &list; // 带头结点的单链表头指针是list->m_next LinkListNode *addNode = NULL; for(int pos = 0; pos < LIST_SIZE; pos++) { if((addNode = AddNode(&list, prevNode, pos + 1)) != NULL) { prevNode = addNode; } } ShowList(&list); while(IsEmptyLinkList(&list) != true) // 循环删除单链表中的数据 { DeleteCurrNode(&list, list.m_next); } ShowList(&list); // 显示单链表 return EXIT_SUCCESS; }
void DestroyNodeTree(tree_node *Node) { if(Node) { if(Node->List) DestroyLinkList(Node->List); if(Node->LeftChild) DestroyNodeTree(Node->LeftChild); if(Node->RightChild) DestroyNodeTree(Node->RightChild); free(Node); Node = NULL; } }