Fix memory leak
authorLukas Jiriste <ljiriste@student.42prague.com>
Fri, 21 Jun 2024 09:22:40 +0000 (11:22 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Fri, 21 Jun 2024 09:22:40 +0000 (11:22 +0200)
This leak was caused by carelessness when working with malloc and t_vec
at the same time.

ft_parse/ft_parse.c

index bd1cf9ddb7448dbe902960643f7d5f84b18e69f6..864f851aeedb1f740e7618041230a8716ea453ff 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/05/20 20:51:36 by ljiriste          #+#    #+#             */
-/*   Updated: 2024/06/21 10:56:32 by ljiriste         ###   ########.fr       */
+/*   Updated: 2024/06/21 11:21:24 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "libft.h"
 #include <stdlib.h>
 
-void   ft_parse_tree_free(void *v_node)
+static void    parse_tree_free_children(void *v_node)
 {
        t_parse_tree_node       *node;
 
        node = v_node;
        if (!node)
                return ;
-       ft_vec_free(&node->children, ft_parse_tree_free);
+       ft_vec_free(&node->children, parse_tree_free_children);
        free_token(&node->token);
+}
+
+void   ft_parse_tree_free(void *node)
+{
+       parse_tree_free_children(node);
+       free(node);
        return ;
 }
 
@@ -113,6 +119,7 @@ int follow_rule(t_stack *stack, size_t rule_num, t_parsing_table *table)
                        ft_parse_tree_free(node);
                        return (1);
                }
+               free(node);
        }
        element.state_num = goto_state(((t_parser_stack_element *)ft_stack_top(stack))->state_num, table, rule->result);
        return (ft_stack_push(stack, &element) != success || element.state_num < 0);