Ako funguje realloc v C?

Programovacie jazyky, rady, poradňa...
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Ako funguje realloc v C?

Príspevok od používateľa marek788 »

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
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2037
Registrovaný: 15 dec 2006, 13:18
Bydlisko: Martin/BA
Kontaktovať používateľa:

Re: Ako funguje realloc v C?

Príspevok od používateľa 94jakub »

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é.
Spixy
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1334
Registrovaný: 24 okt 2010, 12:52

Re: Ako funguje realloc v C?

Príspevok od používateľa Spixy »

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
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8215
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Ako funguje realloc v C?

Príspevok od používateľa harrison314 »

@marek788: jednoducho rataj s ttym, ze realloc ti pointer vzdy zmeni a vyhnes sa problemom.
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Re: Ako funguje realloc v C?

Príspevok od používateľa marek788 »

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
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8215
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Ako funguje realloc v C?

Príspevok od používateľa harrison314 »

Nemusis vytvart novu strukturu, proste v nej len vymen pointer.
Ale hej, v pripade, ak vytvoris novu strukturu, mozes na starej zavolat free.
Napísať odpoveď