Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem dynamicka alokace C, retezce

Pole char p[velikost] je alokované na stacku, takže po opustení rozsahu platnosti sa automaticky uvoľní. Keď pracuješ len na stacku, tak žiaden memory leak nenastane.

Počin "p = NULL" znamená únik pamäte len vtedy, ak si tým stratil akúkoľvek referenciu na alokovanú pamäť. Rovnako aj "p = malloc(...)" znamená únik pamäte, ak si tam mal aj predtým alokovanú pamäť (a tiež už nemáš žiaden iný smerník na tú pamäť, pomocou ktorého by si ju uvoľnil).

Áno, realloc ureže polovicu miesta. Kľudne môže alokovať novú pamäť a prekopírovať do nej polovicu toho poľa. Dáta, ktoré tam boli uložené, zostanú v pamäti, ale ty k nej už prístup mať nebudeš. Keď alokuješ novú pamäť, tak sa môžeš (ale nemusíš) k tým dátam dostať. Závisí od konkrétnej implementácie prekladača, jeho nastavení a knižníc (napr. v debug móde sa pamäť prepíše, v release móde nie a pod.). Keď už dáta nepotrebuješ, tak samozrejme nevadí, keď k nim už nebudeš mať prístup.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny