Ako funguje realloc v C?
Ako funguje realloc v C?
Ahoj, programujem jednu vec, kde mam podozrenie na jednu chybu. Aby som to zistil, potrebujem sa uistit, ci chapem spravne, ako funguje realloc. Myslim si teda, ze ak zavolam realloc na nejaku premennu, funkcia nalokuje podla parametru pozadovane miesto. Prva alternativa je, ze pointer na alokovane miesto bude rovnaky, len ta velkost sa rozsiri. Druha alternativa(ak na danom mieste uz nieje dost miesta), prekopiruje obsah na ine miesto, vrati pointer na novy naalokovany blok, a na ten povodny sam automaticky zavola free? Tymto druhym pripadom si nie som uplne isty. Vie mi v tom niekto poradit? Dakujem.
-
94jakub
Guru wannabe
- Príspevky: 2037
- Registrovaný: 15 dec 2006, 13:18
- Bydlisko: Martin/BA
- Kontaktovať používateľa:
Re: Ako funguje realloc v C?
Vieš aj konkretizovať, čo chceš poradiť?
Je to tak ako si napísal. Realloc alokuje nový pamäťový blok, presunie tam pôvodný obsah a uvoľní pôvodný blok.
To či sa pointer zmení (aj keby zostala veľkosť bloku rovnaká) alebo nie, nie je zaručené.
Je to tak ako si napísal. Realloc alokuje nový pamäťový blok, presunie tam pôvodný obsah a uvoľní pôvodný blok.
To či sa pointer zmení (aj keby zostala veľkosť bloku rovnaká) alebo nie, nie je zaručené.
Re: Ako funguje realloc v C?
http://en.cppreference.com/w/c/memory/realloc
The reallocation is done by either:
a) expanding or contracting the existing area pointed to by ptr, if possible. The contents of the area remain unchanged up to the lesser of the new and old sizes. If the area is expanded, the contents of the new part of the array are undefined.
b) allocating a new memory block of size new_size bytes, copying memory area with size equal the lesser of the new and the old sizes, and freeing the old block.
-
harrison314
Hardcore addict
- Príspevky: 8215
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Ako funguje realloc v C?
@marek788: jednoducho rataj s ttym, ze realloc ti pointer vzdy zmeni a vyhnes sa problemom.
Re: Ako funguje realloc v C?
Potrebujem uchovavat zaznam o alokovanych veciach. Pri mallocu a callocu je to v pohode, tam si ukladam velkost a pointer. Viackrat s tym nic nerobim. Ulozene to mam v strukture (velkost, pointer, flag ci to bolo uvolnene). Problem je vsak pri reallocu, tam to teraz riesim tak, ze vzdy pri reallocu porovnam pointre, ak je po reallocu pointer rovnaky, zaznam nemenim, ak je pointer iny, tak ulozim ako novy zaznam, a na stary pointer zavolam free. Neviem, ci to je takto spravne. Niesom si vsak isty, ci po realokacii sa stary blok sam dealokuje, alebo to musim urobit ja.
-
harrison314
Hardcore addict
- Príspevky: 8215
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Ako funguje realloc v C?
Nemusis vytvart novu strukturu, proste v nej len vymen pointer.
Ale hej, v pripade, ak vytvoris novu strukturu, mozes na starej zavolat free.
Ale hej, v pripade, ak vytvoris novu strukturu, mozes na starej zavolat free.