Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
math_student Forumaš(ica)
Pridružen/a: 02. 11. 2012. (16:38:58) Postovi: (18)16
Spol:
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 13:51 čet, 30. 5. 2013 Naslov: Re: Vezane liste |
|
|
[quote="math_student"]pitanje vezano za vezane liste :)
cesto unutar programa u blokovima deklariramo neke pomocne pokazivace, npr. neki "temp" kad brisemo element liste, i nakon sto obavimo to sto smo htjeli, napravimo free(temp)..zbunjuje me to kako oslobadjamo memoriju koju nismo alocirali ili realocirali(malloc-om/realloc-om), zasto je to potrebno?[/quote]
Nije istina da se oslobađa memorija koja nije alocirana. [tt]free[/tt] oslobađa memoriju na koju pokazuje pointer proslijeđen kao argument funkcije. Prema tome, nije bitno kako se taj pointer zove, nego na što pokazuje, a u slučaju brisanja iz liste argument od [tt]free[/tt] pokazuje na čvor koji smo upravo izbacili iz liste. Memorija za izbačeni čvor je u nekom trenutku bila dinamički alocirana, pa sad kad nam više ne treba, moramo osloboditi tu memoriju.
Nadam se da sam pomogao.
math_student (napisa): | pitanje vezano za vezane liste
cesto unutar programa u blokovima deklariramo neke pomocne pokazivace, npr. neki "temp" kad brisemo element liste, i nakon sto obavimo to sto smo htjeli, napravimo free(temp)..zbunjuje me to kako oslobadjamo memoriju koju nismo alocirali ili realocirali(malloc-om/realloc-om), zasto je to potrebno? |
Nije istina da se oslobađa memorija koja nije alocirana. free oslobađa memoriju na koju pokazuje pointer proslijeđen kao argument funkcije. Prema tome, nije bitno kako se taj pointer zove, nego na što pokazuje, a u slučaju brisanja iz liste argument od free pokazuje na čvor koji smo upravo izbacili iz liste. Memorija za izbačeni čvor je u nekom trenutku bila dinamički alocirana, pa sad kad nam više ne treba, moramo osloboditi tu memoriju.
Nadam se da sam pomogao.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
math_student Forumaš(ica)
Pridružen/a: 02. 11. 2012. (16:38:58) Postovi: (18)16
Spol:
|
|
[Vrh] |
|
frutabella Forumaš(ica)
Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16
|
|
[Vrh] |
|
math_student Forumaš(ica)
Pridružen/a: 02. 11. 2012. (16:38:58) Postovi: (18)16
Spol:
|
|
[Vrh] |
|
frutabella Forumaš(ica)
Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16
|
|
[Vrh] |
|
Leolinus Forumaš(ica)
Pridružen/a: 30. 11. 2012. (16:36:41) Postovi: (10)16
|
Postano: 19:45 pet, 31. 5. 2013 Naslov: |
|
|
[quote="frutabella"]Slicno pitanje:
npr.
typedef struct_ elemen* lista;
lista prvi=NULL, novi;
Kreiramo nove elemente liste i ubacujemo u listu prvi.
Zasto na kraju oslobađamo (brisemo) samo listu prvi?
Listu novi smo alocirali, zar ne bi trebali i nju osloboditi na kraju?
To je primjer zadatka kojeg je profesor rijesio.[/quote]
Uzmi u obzir, ako je novi element koji dodaješ nastao alociranjem memorije da će free(prvi) samo osloboditi prvi element, svi ostali koji su naknadno dodani u listu dodatnom alokacijom memorije(malloc) moraju biti naknadno oslobođeni.
Ništa ne govori funkciji free() da je ono što daješ lista i da bi trebalo otići po svim next-ovima i osloboditi.
Tako da, ako je takav bio primjer zadatka onda je oslobađanje izvedeno na pogrešan način.
frutabella (napisa): | Slicno pitanje:
npr.
typedef struct_ elemen* lista;
lista prvi=NULL, novi;
Kreiramo nove elemente liste i ubacujemo u listu prvi.
Zasto na kraju oslobađamo (brisemo) samo listu prvi?
Listu novi smo alocirali, zar ne bi trebali i nju osloboditi na kraju?
To je primjer zadatka kojeg je profesor rijesio. |
Uzmi u obzir, ako je novi element koji dodaješ nastao alociranjem memorije da će free(prvi) samo osloboditi prvi element, svi ostali koji su naknadno dodani u listu dodatnom alokacijom memorije(malloc) moraju biti naknadno oslobođeni.
Ništa ne govori funkciji free() da je ono što daješ lista i da bi trebalo otići po svim next-ovima i osloboditi.
Tako da, ako je takav bio primjer zadatka onda je oslobađanje izvedeno na pogrešan način.
|
|
[Vrh] |
|
|