内存溢出真的很可怕,10秒左右直接给我电脑卡崩了。16G内存,以肉眼可见的速率直冲100%

This commit is contained in:
建峰 2024-09-02 02:15:17 +08:00
parent c9a971971a
commit bfc6e88bb9
2 changed files with 13 additions and 22 deletions

View File

@ -1483,22 +1483,12 @@ void* tree_begin(struct _tree* self)
case ORDER_LEFT_PRE:
{
struct _tree_node* node = NULL;
self->cur_node = self->_root;
if(!self->stack->empty(self->stack) || self->cur_node != NULL)
{
if(self->cur_node != NULL)
{
node = self->cur_node;
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;
self->stack->clear(self->stack);
node = self->cur_node;
self->stack->push(self->stack, &self->cur_node);
return node->obj;
}break;
case ORDER_LEFT_IN:
{
@ -1542,7 +1532,7 @@ void* tree_next(struct _tree* self)
case ORDER_LEFT_PRE:
{
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)
{
@ -1555,7 +1545,7 @@ void* tree_next(struct _tree* self)
self->cur_node = self->cur_node->right;
}
}
return node;
return node->obj;
}break;
case ORDER_LEFT_IN:
{
@ -1598,8 +1588,7 @@ void* tree_end(struct _tree* self)
{
case ORDER_LEFT_PRE:
{
struct _tree_node* node = NULL;
return node;
return NULL;
}break;
case ORDER_LEFT_IN:
{
@ -1647,6 +1636,7 @@ bool tree_avl_init(struct _tree *self, uint32_t obj_size)
// self->_ratio = 2;
self->_right_priority = false;
self->_order = ORDER_PRE;
self->insert = tree_avl_insert;
self->delete = tree_avl_delete;

View File

@ -467,10 +467,10 @@ void test_rbtree_struct(void)
static void test_tree_iter(void)
{
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[] = { 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 count = 0;
int temp = 0;
@ -493,10 +493,11 @@ static void test_tree_iter(void)
// printf("\n");
}
printf("\niter test\n");
int * iter = NULL;
for(iter = tree->begin(tree); iter != tree->end(tree); iter = tree->next(tree))
{
printf("%d ", *iter);
printf("%d \n", *iter);
buff[count++] = *iter;
}