[so] free() in procesele copil

Octavian Purdila tavi at cs.pub.ro
Tue Oct 23 12:43:05 EEST 2007


On Tuesday 23 October 2007, Andrei Ismail wrote:
> Salut,
>
> De ce imi raporteaza valgrind "Invalid read of size 4"
> pentru programul din attachment?
>

Pentru ca citesti din buffer dupa ce ai dat free pe el (in parinte).

> Intrebari suplimentare:
> 1. Mai este valabil pointer-ul "mem" in procesul
> copil?
>

Da, pana cand faci free in procesul copil.

> 2. Daca 1 este adevarat, trebuie sa dau free() atat in
> procesul parinte cat si in procesul copil pt
> pointer-ul mem?
>

Da. (de altfel daca scoti free-ul fie din copil fie din parinte o sa vezi ca 
valgrind iti zice ca ai leak-uri).

> 3. Daca 1 este fals, inseamna ca structurile interne
> ale malloc() sunt per proces, si ele nu sunt copiate
> de la un proces la altul prin fork()?
>

N/A

> 4. Bonus (de la Andrei Pasatoiu, coleg de grupa cu
> mine): cine dez-aloca memoria pentru char *const
> argv[], care este pasat ca parametru functiilor din
> familia exec()? Inseamna ca avem voie sa alocam doar
> pe stiva variabilele date ca parametru catre exec*() ?
>

Apelul exec va copia argumentele pe stiva in noul proces [1]. Dezalocarea (din 
noul proces) se va face in momentul in care se distruge spatiul de adresa (la 
exit()). 

In procesul din care chemati exec*() trebuie sa dezalocati argumentele dupa ce 
faceti exec*(), daca ele au fost alocate.

[1] Pagina 3-28, System V Application Binary Interface - Intel386 Architecture 
Processor Supplement, Fourth Edition. 
http://www.caldera.com/developers/devspecs/abi386-4.pdf


tavi

PS: Pentru a posta pe lista, trebuie sa fiti inregistrati.




More information about the so mailing list