Skip to content

Commit 7021135

Browse files
committed
leaks
1 parent 093cc13 commit 7021135

File tree

9 files changed

+145
-34
lines changed

9 files changed

+145
-34
lines changed

deque/deque_linked_list/implementation_example/test_main.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: jko <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2020/03/30 18:55:18 by jko #+# #+# */
9-
/* Updated: 2020/03/30 19:11:32 by jko ### ########.fr */
9+
/* Updated: 2020/04/05 19:13:49 by jko ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -127,6 +127,7 @@ int main(void)
127127
free_deque(deque, free);
128128
print_deque(deque);
129129

130+
deque = 0;
130131
system("leaks a.out > leaks_result && cat leaks_result | grep leaked");
131132
return (0);
132133
}

linked_list/circular_linked_list/grademe_files/test.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: jko <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2020/03/08 17:59:53 by jko #+# #+# */
9-
/* Updated: 2020/03/09 20:17:06 by jko ### ########.fr */
9+
/* Updated: 2020/04/05 19:16:05 by jko ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -184,6 +184,7 @@ int main(void)
184184
free(test_data[i]);
185185
}
186186

187+
list = 0;
187188
system("leaks a.out > leaks_result");
188189

189190
return 0;

linked_list/doubly_linked_list/grademe_files/test.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ int main(void)
7373

7474
free_list(list);
7575

76-
76+
list = 0;
7777
system("leaks a.out > leaks_result");
7878
return (0);
7979
}

queue/queue_array/implementation_example/test_main.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: jko <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2020/03/24 16:36:35 by jko #+# #+# */
9-
/* Updated: 2020/03/24 16:48:41 by jko ### ########.fr */
9+
/* Updated: 2020/04/05 19:18:55 by jko ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -96,6 +96,7 @@ int main(void)
9696

9797
free_queue(queue, free);
9898

99+
queue = 0;
99100
system("leaks a.out > leaks_result && cat leaks_result | grep leaked");
100101
return (0);
101102
}

queue/queue_linked_list/implementation_example/test_main.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: jko <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2020/03/12 00:50:22 by jko #+# #+# */
9-
/* Updated: 2020/03/24 17:54:17 by jko ### ########.fr */
9+
/* Updated: 2020/04/05 19:19:26 by jko ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -79,6 +79,7 @@ int main(void)
7979

8080
free_queue(queue, free);
8181

82+
queue = 0;
8283
system("leaks a.out > leaks_result && cat leaks_result | grep leaked");
8384
return (0);
8485
}

stack/stack_array/implementation_example/test_main.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: jko <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2020/03/12 00:50:22 by jko #+# #+# */
9-
/* Updated: 2020/03/12 00:50:31 by jko ### ########.fr */
9+
/* Updated: 2020/04/05 19:17:41 by jko ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -70,6 +70,7 @@ int main(void)
7070

7171
free_stack(stack, free);
7272

73+
stack = 0;
7374
system("leaks a.out > leaks_result; cat leaks_result | grep leaked");
7475
return (0);
7576
}

stack/stack_linked_list/implementation_example/test_main.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: jko <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2020/03/12 00:50:22 by jko #+# #+# */
9-
/* Updated: 2020/03/12 02:12:35 by jko ### ########.fr */
9+
/* Updated: 2020/04/05 19:17:53 by jko ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -69,6 +69,7 @@ int main(void)
6969

7070
free_stack(stack, free);
7171

72+
stack = 0;
7273
system("leaks a.out > leaks_result; cat leaks_result | grep leaked");
7374
return (0);
7475
}

tree/binary_search_tree/implementation_example/binary_search_tree.c

+39-27
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: jko <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2020/04/04 21:13:23 by jko #+# #+# */
9-
/* Updated: 2020/04/05 17:03:56 by jko ### ########.fr */
9+
/* Updated: 2020/04/05 19:06:10 by jko ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -97,15 +97,46 @@ int tree_insert(t_tree *tree, void *data)
9797
return (1);
9898
}
9999

100-
static t_node *find_next_bigger_parent(t_node *curr)
100+
static t_node *change_node(
101+
t_node *curr,
102+
t_node *prev,
103+
int cmp_result,
104+
t_node **root)
101105
{
106+
t_node *temp;
107+
t_node *prev2;
108+
109+
temp = curr;
110+
if (!curr->left && !curr->right)
111+
curr = 0;
112+
else if (curr->left && curr->right)
113+
{
114+
prev2 = curr;
115+
curr = curr->right;
116+
while (curr->left)
117+
{
118+
prev2 = curr;
119+
curr = curr->left;
120+
}
121+
curr = change_node(curr, prev2, -1, root);
122+
curr->left = temp->left;
123+
curr->right = temp->right;
124+
}
125+
else
126+
curr = curr->left ? curr->left : curr->right;
127+
if (!prev)
128+
*root = curr;
129+
else if (cmp_result < 0)
130+
prev->left = curr;
131+
else
132+
prev->right = curr;
133+
return (temp);
102134
}
103135

104136
int tree_delete(t_tree *tree, void *data_ref, void (*free_data)(void *))
105137
{
106138
t_node *prev;
107139
t_node *curr;
108-
t_node *temp;
109140
int cmp_result;
110141

111142
if (!tree || !free_data || tree_size(tree) == 0)
@@ -114,38 +145,19 @@ int tree_delete(t_tree *tree, void *data_ref, void (*free_data)(void *))
114145
prev = 0;
115146
while (curr)
116147
{
117-
if ((cmp_result = tree->cmp(data_ref, curr->data)))
148+
if (!(cmp_result = tree->cmp(data_ref, curr->data)))
118149
break ;
150+
prev = curr;
119151
if (cmp_result < 0)
120152
curr = curr->left;
121153
else
122154
curr = curr->right;
123155
}
124156
if (!curr)
125157
return (0);
126-
if (!prev)
127-
tree->root = 0;
128-
temp = curr;
129-
130-
if (!curr->left && !curr->right)
131-
curr = 0;
132-
else if (curr->left && curr->right)
133-
{
134-
curr = curr->right
135-
while (curr->left && curr->right)
136-
{
137-
138-
}
139-
}
140-
else
141-
curr = curr->left ? curr->left : curr->right;
142-
143-
if (cmp_result < 0)
144-
prev->left = curr;
145-
else
146-
prev->right = curr;
147-
free_data(temp->data);
148-
free(temp);
158+
curr = change_node(curr, prev, cmp_result, &tree->root);
159+
free_data(curr->data);
160+
free(curr);
149161
tree->size--;
150162
return (1);
151163
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/* ************************************************************************** */
2+
/* */
3+
/* ::: :::::::: */
4+
/* test_main.c :+: :+: :+: */
5+
/* +:+ +:+ +:+ */
6+
/* By: jko <[email protected]> +#+ +:+ +#+ */
7+
/* +#+#+#+#+#+ +#+ */
8+
/* Created: 2020/04/05 17:50:41 by jko #+# #+# */
9+
/* Updated: 2020/04/05 19:12:55 by jko ### ########.fr */
10+
/* */
11+
/* ************************************************************************** */
12+
13+
#include "tree.h"
14+
#include <stdio.h>
15+
16+
int cmp(void *a, void *b)
17+
{
18+
return (*(int *)a - *(int *)b);
19+
}
20+
21+
void print_tree(int index, t_node *node)
22+
{
23+
if (!node)
24+
return ;
25+
printf("#%d node : %d\n", index, *(int *)node->data);
26+
print_tree(index * 2, node->left);
27+
print_tree(index * 2 + 1, node->right);
28+
}
29+
30+
void free_data(void *a)
31+
{
32+
printf("free data %d\n", *(int *)a);
33+
}
34+
35+
int main(void)
36+
{
37+
t_node *temp;
38+
int nums[101];
39+
for (int i = 0; i < 101; ++i) {
40+
nums[i] = i;
41+
}
42+
43+
t_tree *tree = tree_init(cmp);
44+
printf("size = %d\n", tree_size(tree));
45+
print_tree(1, tree->root);
46+
47+
tree_insert(tree, &nums[50]);
48+
printf("size = %d\n", tree_size(tree));
49+
print_tree(1, tree->root);
50+
51+
tree_insert(tree, &nums[1]);
52+
printf("size = %d\n", tree_size(tree));
53+
print_tree(1, tree->root);
54+
55+
tree_insert(tree, &nums[32]);
56+
printf("size = %d\n", tree_size(tree));
57+
print_tree(1, tree->root);
58+
59+
tree_insert(tree, &nums[63]);
60+
printf("size = %d\n", tree_size(tree));
61+
print_tree(1, tree->root);
62+
63+
tree_insert(tree, &nums[50]);
64+
printf("size = %d\n", tree_size(tree));
65+
print_tree(1, tree->root);
66+
67+
tree_insert(tree, &nums[1]);
68+
printf("size = %d\n", tree_size(tree));
69+
print_tree(1, tree->root);
70+
71+
tree_insert(tree, &nums[32]);
72+
printf("size = %d\n", tree_size(tree));
73+
print_tree(1, tree->root);
74+
75+
tree_insert(tree, &nums[63]);
76+
printf("size = %d\n", tree_size(tree));
77+
print_tree(1, tree->root);
78+
79+
80+
if ((temp = tree_find(tree, &nums[63])))
81+
printf("find %d\n", *(int *)temp->data);
82+
else
83+
printf("not found\n");
84+
85+
tree_delete(tree, &nums[63], free_data);
86+
printf("size = %d\n", tree_size(tree));
87+
print_tree(1, tree->root);
88+
89+
tree = 0;
90+
system("leaks a.out > leaks_result && cat leaks_result | grep leaked");
91+
92+
return (0);
93+
}

0 commit comments

Comments
 (0)