Hey guys im trying to delete the middle node in a doubly linked list but i seem to getting errors when i check for memory leaks.
From what i have drawn im making submenuCurrent point in the middle then the previous pointer pointing to the left and next pointing to the node after submenuCurrent.
I cant figure out what im doing wrong
Code:
do
{
printf("\nItem ID (5 characters): ");
fgets(itemID, ID_LEN+EXTRA_SPACES,stdin);
if(itemID[0] == '\n')
return;
valid = isValid(itemID);
if(valid == TRUE)
{
current = menu->headCategory;
previous = NULL;
while(current != NULL)
{
submenuCurrent = current->headItem;
submenuPrevious = NULL;
/* If categoryID matches user's input. */
if(strcmp(current->categoryID, input) == 0)
{
while(submenuCurrent != NULL)
{
/* If itemID matches user's input. */
if(strcmp(submenuCurrent->itemID, itemID) == 0)
{
printf("\nMenu item '%s %s' deleted from system.\n",
submenuCurrent->itemID, submenuCurrent->itemName);
/* If deleting at the head. */
if(submenuCurrent == current->headItem)
{
submenuNext = submenuCurrent;
submenuPrevious = submenuCurrent->nextItem;
free(submenuNext);
submenuNext = NULL;
current->headItem = submenuPrevious;
return;
}
/* If deleting at the end. */
else if(submenuCurrent->nextItem == NULL)
{
free(submenuCurrent);
submenuCurrent = NULL;
submenuPrevious->nextItem = NULL;
return;
}
/* If deleting in between the list. */
else
{
/* submenuNext = submenuCurrent;
submenuPrevious->nextItem = submenuCurrent->nextItem;*/
submenuPrevious = submenuCurrent->prevItem;
submenuNext = submenuCurrent->nextItem;
submenuPrevious->nextItem = submenuCurrent->nextItem;
submenuNext->prevItem = submenuCurrent->prevItem;
submenuNext->nextItem = NULL;
free(submenuCurrent);
submenuCurrent = NULL;
return;
}
break;
}
submenuPrevious = submenuCurrent;
submenuCurrent = submenuCurrent->nextItem;
}
}
previous = current;
current = current->nextCategory;
}