Утечка памяти, не могу понять где
От: Tasheehoo  
Дата: 24.11.16 13:42
Оценка:
Хочу реализовать пул нодов(node) на основе двусвязного списка для С, и получился такой код:

#include <stdlib.h>
#include <string.h>

struct item_t {
    void *next;
};
typedef struct item_t item_t;

item_t *pool_root = NULL, *pool_last = NULL;

void put_elem_mem(item_t *sv)
{
  if (!sv || sv->next != NULL)
    return;

  if (pool_last == NULL)
    pool_root = pool_last = sv;
  else
    pool_last->next = sv;
}

item_t* get_elem_mem()
{
  item_t *r = NULL;
  if ((r = pool_root) == NULL)
  {
    r = malloc(sizeof(struct item_t));
    r->next = NULL;
    
    return r;
  }

  if((pool_root = r->next) == NULL)
    pool_last = NULL;

  r->next = NULL;

  return r;
}

int main() {
    while (1) {
        void *p0 = get_elem_mem();
        void *p1 = get_elem_mem();
        void *p2 = get_elem_mem();
        
        put_elem_mem(p0);
        put_elem_mem(p1);
        put_elem_mem(p2);
    }
}

Тут в main() если создавать один или два нода — память не течет. Но если создавать три и более — течет.
Чесслово, три часа не могу понять где я ошибся. Помогите пожалуйста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.