mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-18 03:51:35 +08:00
内存溢出真的很可怕,10秒左右直接给我电脑卡崩了。16G内存,以肉眼可见的速率直冲100%
This commit is contained in:
parent
c9a971971a
commit
bfc6e88bb9
28
src/tree.c
28
src/tree.c
@ -1483,22 +1483,12 @@ void* tree_begin(struct _tree* self)
|
|||||||
case ORDER_LEFT_PRE:
|
case ORDER_LEFT_PRE:
|
||||||
{
|
{
|
||||||
struct _tree_node* node = NULL;
|
struct _tree_node* node = NULL;
|
||||||
|
|
||||||
self->cur_node = self->_root;
|
self->cur_node = self->_root;
|
||||||
if(!self->stack->empty(self->stack) || self->cur_node != NULL)
|
|
||||||
{
|
self->stack->clear(self->stack);
|
||||||
if(self->cur_node != NULL)
|
node = self->cur_node;
|
||||||
{
|
self->stack->push(self->stack, &self->cur_node);
|
||||||
node = self->cur_node;
|
return node->obj;
|
||||||
self->stack->push(self->stack, &self->cur_node);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self->stack->pop(self->stack, &self->cur_node);
|
|
||||||
self->cur_node = self->cur_node->right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return node;
|
|
||||||
}break;
|
}break;
|
||||||
case ORDER_LEFT_IN:
|
case ORDER_LEFT_IN:
|
||||||
{
|
{
|
||||||
@ -1542,7 +1532,7 @@ void* tree_next(struct _tree* self)
|
|||||||
case ORDER_LEFT_PRE:
|
case ORDER_LEFT_PRE:
|
||||||
{
|
{
|
||||||
struct _tree_node* node = NULL;
|
struct _tree_node* node = NULL;
|
||||||
if(!self->stack->empty(self->stack) || self->cur_node != NULL)
|
while(!self->stack->empty(self->stack) || self->cur_node != NULL)
|
||||||
{
|
{
|
||||||
if(self->cur_node != NULL)
|
if(self->cur_node != NULL)
|
||||||
{
|
{
|
||||||
@ -1555,7 +1545,7 @@ void* tree_next(struct _tree* self)
|
|||||||
self->cur_node = self->cur_node->right;
|
self->cur_node = self->cur_node->right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return node;
|
return node->obj;
|
||||||
}break;
|
}break;
|
||||||
case ORDER_LEFT_IN:
|
case ORDER_LEFT_IN:
|
||||||
{
|
{
|
||||||
@ -1598,8 +1588,7 @@ void* tree_end(struct _tree* self)
|
|||||||
{
|
{
|
||||||
case ORDER_LEFT_PRE:
|
case ORDER_LEFT_PRE:
|
||||||
{
|
{
|
||||||
struct _tree_node* node = NULL;
|
return NULL;
|
||||||
return node;
|
|
||||||
}break;
|
}break;
|
||||||
case ORDER_LEFT_IN:
|
case ORDER_LEFT_IN:
|
||||||
{
|
{
|
||||||
@ -1647,6 +1636,7 @@ bool tree_avl_init(struct _tree *self, uint32_t obj_size)
|
|||||||
// self->_ratio = 2;
|
// self->_ratio = 2;
|
||||||
|
|
||||||
self->_right_priority = false;
|
self->_right_priority = false;
|
||||||
|
self->_order = ORDER_PRE;
|
||||||
|
|
||||||
self->insert = tree_avl_insert;
|
self->insert = tree_avl_insert;
|
||||||
self->delete = tree_avl_delete;
|
self->delete = tree_avl_delete;
|
||||||
|
@ -467,10 +467,10 @@ void test_rbtree_struct(void)
|
|||||||
static void test_tree_iter(void)
|
static void test_tree_iter(void)
|
||||||
{
|
{
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
// int data[] = { 2,1,3,4};
|
int data[] = { 2,1,3,4};
|
||||||
// int data[] = { 1,2,3,4,5,6};
|
// int data[] = { 1,2,3,4,5,6};
|
||||||
// int data[] = { 5,2,3,1,7,8,6 };
|
// int data[] = { 5,2,3,1,7,8,6 };
|
||||||
int data[] = { 5,2,3,1,7,8,6,4,9,10,12,11,15,14,13 };
|
// int data[] = { 5,2,3,1,7,8,6,4,9,10,12,11,15,14,13 };
|
||||||
int buff[32];
|
int buff[32];
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int temp = 0;
|
int temp = 0;
|
||||||
@ -493,10 +493,11 @@ static void test_tree_iter(void)
|
|||||||
// printf("\n");
|
// printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("\niter test\n");
|
||||||
int * iter = NULL;
|
int * iter = NULL;
|
||||||
for(iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
|
for(iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
|
||||||
{
|
{
|
||||||
printf("%d ", *iter);
|
printf("%d \n", *iter);
|
||||||
|
|
||||||
buff[count++] = *iter;
|
buff[count++] = *iter;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user