Хочу реализовать пул нодов(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() если создавать один или два нода — память не течет. Но если создавать три и более — течет.
Чесслово, три часа не могу понять где я ошибся. Помогите пожалуйста.