Fork si exec nu au nimic in comun. Lui exec nu ii pasa daca ai facut sau nu fork inainte. El va elibera automat memoria daca nu esueaza. Dar daca esueaza, memoria din copil/parinte nu mai e eliberata automat. Desigur daca vine exit se va elibera memoria de catre sistemul de operare. Dar valgrind il considera memory leak fiindca trebuie sa ai atatea free-uri cate malloc-uri. Exec asigura acest lucru doar daca reuseste.<div>
<br></div><div>Mie imi tipa valgrind la un <string> declarat in c++ cand exec esua sau nu faceam exec pe copilul din fork().<br><br><div class="gmail_quote">2012/3/18 Mirea Bogdan-Stefan <span dir="ltr"><<a href="mailto:b.mirea@yahoo.com">b.mirea@yahoo.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">Mihail Costea <mihail.costea2005@...> writes:<br>
<br>
><br>
><br>
> Valgrind nu e de acord cu tine. E memory leak. Ruleaza acest program odata cu<br>
free comentat si odata decomentat:<br>
><br>
> ---------------<br>
> #include <stdlib.h><br>
> #include <unistd.h><br>
><br>
> int main(int argc, char *argv[]) {<br>
> int *a = malloc(sizeof(int));<br>
> *a = 15;<br>
><br>
> execl("lssd", "sadew", NULL);<br>
> //free(a);<br>
> return 1;<br>
> }<br>
> ---------------<br>
><br>
><br>
> Vei observa memory leaks. Exec esueaza si astfel memoria ocupata de <a> nu mai<br>
este eliberata automat.<br>
><br>
> Mihai<br>
> 2012/3/18 Mirea Bogdan-Stefan <<a href="mailto:b.mirea@yahoo.com">b.mirea@yahoo.com</a>><br>
> Practic, tu ar trebui sa te asiguri ca in zona de cod a procesului copil<br>
</div>dedinainte de exec sa nu ai Memory Leak-uri.<br>
<div class="im">> Scuze pt reply<br>
> Bogdan<br>
><br>
_______________________________________________<a href="http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii" target="_blank">http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii</a><br>
<br>
<br>
</div>Ce ai tu acolo, este memory leak pentru ca tu ai doar proces parinte, care va<br>
face exec. Eu ma refeream la cazul in care faci fork.<br>
Este normal ca in procesul parinte sa eliberezi memoria. Si este oarecum normal<br>
ca si in procesul copil sa trebuiasca eliberata, dar nu cred ca este necesar<br>
pentru ca tu o sa astepti in parinte terminarea copilului, iar cand terminarea<br>
lui va fi constatata, toata memoria alocata pt el se va elibera.<br>
<br>
<br>
Cred ca ar fi bine sa ne raspunda un asistent.<br>
<br>
<br>
<br>
_______________________________________________<br>
<a href="http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii" target="_blank">http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii</a></blockquote></div><br></div>