• # Reallocation sans free ?

    Posté par . En réponse au message ma j'galère sur un simple free sur un string. Évalué à 7. Dernière modification le 28 août 2019 à 23:00.

    Je suis tombé sur un truc intéressant intitulé "Communication classique entre processus"
    concernant une "possibilité rarement proposée par les shell".

    Et, de quoi s'agit-il ?

    Alors je sais que c'est un peu imbuvable question longueur,

    Oui. Essayez de garder le même style. Ici, la position des {, par exemple, est aléatoire.

    utilisez des goto pour la gestion d'erreur avec libération de ressources, ce sera plus lisible et vous risquerez moins d'en oublier une.

    Alors mon problème, est que je n'arrive pas à libérer les variables concaténées ( d'où l'utilisation qui fonctionne dans le programme "test.c" ci-dessus ) lorsqu'il s'agit de simples caractères au niveau de l'appel à "process_datas_init" dans "process_exec".

    Préférez strncat et strncpy qui vous éviterons des ennuis, d'autant que vous recalculez la longueur juste avant.

    Je sens un problème dans process_datas_internal.

    Je suppose que result a été alloué ailleurs et passé en paramètre. Dans ce cas, à quoi rime le calloc ? Il provoque une nouvelle allocation de result sans que l'ancien ne soit libéré et n'a pas de sens avec une taille de 1 (sizeof(char)) . Ce n'est pas plutôt un realloc que vous vouliez faire ?

    Au passage, plutôt que de faire des if dans les for sur la variable de loop. Traitez les séparément:

    /* l=1*/
    strcpy(*result, p->commands[i][1]);
    /* l=2.. */
    for(int l=2;l < p->args[i][1] - 1; l++){
     strcat(*result, p->commands[i][l]);
    }

    Pourquoi passer size par référence alors que vous ne l'utilisez que par variable ?