Я создаю простой связанный список в C, чтобы привыкнуть к некоторому управлению памятью.Я определил структуру узла, которая содержит ключ char *, char * value и узел * next.
void newnode(node *n, int x, int y)
{
n->key = malloc(x*sizeof(char));
n->value = malloc(y*sizeof(char));
}
//This how i create a new node given a key and value to make sure that I have allocated the proper amount of space. x and y are the strlengths of the key and value being added.
// In the add function I use the following two lines (when it is valid to add a new key value pair)
current->next = malloc(sizeof(node));
node_newnode(current->next,strlen(key),strlen(value));
// My remove function then searches for a key and if that key exists in the structure it removes that node. I use a delete point to keep track of the node needing deletion.
void remove(dict *d, const char *key)
{
node* delete;
node* current;
current = d->head;
while(current->next != NULL){
if(strcmp(current->next->key,key)==0){
delete = current->next;
if(current->next->next != NULL)
current = current->next->next;
else
current->next = NULL;
node_destroy(delete);
break;
}
current = current->next;
}
}
// Here is the node_destroy function I used in remove.
void node_destroy(node* delete)
{
free(delete->key);
free(delete->value);
free(delete);
}
У меня проблемы с этой функцией удаления.По сути, кажется, что он не удаляет узлы значения ключа должным образом и оставляет остатки узла вместо полного его удаления.Я понятия не имею, почему это возможно, особенно когда я устанавливаю указатели так, чтобы они указывали за узлом, нуждающимся в удалении.В худшем случае, я чувствую, что должна просто происходить утечка памяти, но каким-то образом эти узлы не удаляются и остаются частью структуры, когда я распечатываю словарь.Я новичок в том, что мне приходится обращать внимание на расположение памяти, и я не могу понять, что происходит не так.
Есть предложения?
PS Функция уничтожения моего узла не освобождает память должным образом?