faboussard / 42_minishell

1 stars 0 forks source link

Malloc check issues #110

Closed melobern closed 4 months ago

melobern commented 4 months ago

:hash::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::1234::hash:

:anger: MALLOC CHECK :anger:

Quand on assigne un malloc à NULL :confetti_ball:

Dans :star2: manage_envp_lists.c :star2:

bool    init_envp_node(t_envp_list *new_envp, char *target, char *content)
{
    (void)target;
    new_envp->target = NULL;// ft_strdup(target); <============== LUI LÀ !
    if (new_envp->target == NULL)
    {
        free(new_envp);
        return (false);
    }
    if (content)
    {
        new_envp->value = ft_strdup(content);
        if (new_envp->value == NULL)
        {
            free_safely_str(&new_envp->target);
            free(new_envp);
            return (false);
        }
        new_envp->value_size = ft_strlen(new_envp->value);
    }
    new_envp->target_size = ft_strlen(new_envp->target);
    return (true);
}

Valgrind nous répond :

==2014171== Invalid free() / delete / delete[] / realloc()
==2014171==    at 0x484B27F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==2014171==    by 0x403382: create_new_envp (manage_envp_lists.c:64)
==2014171==    by 0x402CBD: add_new_envp (env_variables.c:31)
==2014171==    by 0x402E25: get_target_and_value (env_variables.c:60)
==2014171==    by 0x402EF5: create_env_variable (env_variables.c:77)
==2014171==    by 0x402F60: create_envp_list (env_variables.c:87)
==2014171==    by 0x40133C: set_environment (main.c:19)
==2014171==    by 0x401721: main (main.c:161)
==2014171==  Address 0x4b230e0 is 0 bytes inside a block of size 40 free'd
==2014171==    at 0x484B27F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==2014171==    by 0x403297: init_envp_node (manage_envp_lists.c:37)
==2014171==    by 0x403371: create_new_envp (manage_envp_lists.c:62)
==2014171==    by 0x402CBD: add_new_envp (env_variables.c:31)
==2014171==    by 0x402E25: get_target_and_value (env_variables.c:60)
==2014171==    by 0x402EF5: create_env_variable (env_variables.c:77)
==2014171==    by 0x402F60: create_envp_list (env_variables.c:87)
==2014171==    by 0x40133C: set_environment (main.c:19)
==2014171==    by 0x401721: main (main.c:161)
==2014171==  Block was alloc'd at
==2014171==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==2014171==    by 0x40C1F2: ft_calloc (ft_calloc.c:30)
==2014171==    by 0x4031F6: allocate_envp_node (manage_envp_lists.c:21)
==2014171==    by 0x403344: create_new_envp (manage_envp_lists.c:59)
==2014171==    by 0x402CBD: add_new_envp (env_variables.c:31)
==2014171==    by 0x402E25: get_target_and_value (env_variables.c:60)
==2014171==    by 0x402EF5: create_env_variable (env_variables.c:77)
==2014171==    by 0x402F60: create_envp_list (env_variables.c:87)
==2014171==    by 0x40133C: set_environment (main.c:19)
==2014171==    by 0x401721: main (main.c:161)
==2014171== 
Malloc failed at get_target_and_value
==2014171== 
==2014171== FILE DESCRIPTORS: 3 open (3 std) at exit.
==2014171== 
==2014171== HEAP SUMMARY:
==2014171==     in use at exit: 0 bytes in 0 blocks
==2014171==   total heap usage: 4 allocs, 5 frees, 92 bytes allocated
==2014171== 
==2014171== All heap blocks were freed -- no leaks are possible
==2014171== 
==2014171== For lists of detected and suppressed errors, rerun with: -s
==2014171== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
faboussard commented 4 months ago

franchement des issues ecrites comme ca ca passe bcp mieux hihi LEAK corrige. je reconnais que cest utile de tester tous les malloc a NULL :p est ce qu on peut faire une issue par leak au lieu de les grouper ? ca permet de pas en louper et jaime les close haha

melobern commented 4 months ago

Ok ^^ Aussi pour les blocs de code, que ce soit du c ou un message shell (genre la sortie de valgrind) le mieux est de mettre c. Pour aller plus vite, après avoir sélectionné et mis le code en cliquant sur <> , on peut mettre directement c après les trois ``` qui commencent le code. Du style :

printf("coucou");