[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