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:
# Reallocation sans free ?
Posté par David Marec . 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.
Et, de quoi s'agit-il ?
Oui. Essayez de garder le même style. Ici, la position des
{, par exemple, est aléatoire.utilisez des
gotopour la gestion d'erreur avec libération de ressources, ce sera plus lisible et vous risquerez moins d'en oublier une.Préférez
strncatetstrncpyqui 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
resulta été alloué ailleurs et passé en paramètre. Dans ce cas, à quoi rime lecalloc? Il provoque une nouvelle allocation deresultsans 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
ifdans lesforsur la variable de loop. Traitez les séparément:Pourquoi passer
sizepar référence alors que vous ne l'utilisez que par variable ?