Bonjour Mr Marec,
je vais tenter d'expliquer cette partie du code:
1. result: résultat en chaîne de caractères des opérations précédentes de l'exécution de la chaîne de modules courante - je nommerai ces dernières "listing". Il est censé être ré-allouer dès que nécessaire et libéré après conservation dans le tableau process_datas->result de ma structure process_datas, ce à la fin de l'exécution de chaque listing.
2. size: taille du string result nécessaire à la fonction fd_readn pour le calcul d'un espace supplémentaire éventuel - le but étant de limiter les libérations.
1. len: somme des longueurs des strings à concaténer ( ne peut pas être égal à 0 ):
- code de la fonction interne concat revisité:
int len = 0;
for(int l = 1; l < p->args[*i][1] - 1; l++)
len += strlen(p->commands[*i][l]);
if(*size < len){
*size = len;
if(!*size)
*result = calloc(len + 1, sizeof(char));
else
*result = realloc(*result, (len + 1) * sizeof(char));
}
strncpy(*result, p->commands[*i][1], strlen(p->commands[*i][1]));
for(int l = 2; l < p->args[*i][1] - 1; l++)
{
strncat(*result, p->commands[*i][l], strlen(p->commands[*i][l]));
}
++(*i);
return 256;
remarquez l'incrémentation du i de la boucle de process_exec et dont je vérifie la validité dans cette même dernière fonction ( améliorée ), afin d'éviter de passer par le pipe si jamais le listing courant se terminait par une commande internal:
Mon programme se comporte mieux ( il fonctionne ). Par contre, je vais devoir m'arracher les cheveux pour trouver le pointeur non libéré que m'indique valgrind:
merci encore une fois de votre attention. Si vous souhaitez collaborer à la conception de ce module destiné à la création de nouveaux modules... n'hésitez pas à m'en faire part.
[^] # Re: Reallocation sans free ?
Posté par gunsailor . En réponse au message ma j'galère sur un simple free sur un string. Évalué à 1.
Bonjour Mr Marec,
je vais tenter d'expliquer cette partie du code:
1. result: résultat en chaîne de caractères des opérations précédentes de l'exécution de la chaîne de modules courante - je nommerai ces dernières "listing". Il est censé être ré-allouer dès que nécessaire et libéré après conservation dans le tableau process_datas->result de ma structure process_datas, ce à la fin de l'exécution de chaque listing.
2. size: taille du string result nécessaire à la fonction fd_readn pour le calcul d'un espace supplémentaire éventuel - le but étant de limiter les libérations.
1. len: somme des longueurs des strings à concaténer ( ne peut pas être égal à 0 ):
- code de la fonction interne concat revisité:
remarquez l'incrémentation du i de la boucle de process_exec et dont je vérifie la validité dans cette même dernière fonction ( améliorée ), afin d'éviter de passer par le pipe si jamais le listing courant se terminait par une commande internal:
Mon programme se comporte mieux ( il fonctionne ). Par contre, je vais devoir m'arracher les cheveux pour trouver le pointeur non libéré que m'indique valgrind:
merci encore une fois de votre attention. Si vous souhaitez collaborer à la conception de ce module destiné à la création de nouveaux modules... n'hésitez pas à m'en faire part.