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

Smerník r ukazuje po priradení toho reťazca do pamäte, v ktorej je uložený reťazec "no nazdarek". Táto pamäť je pripravená ešte pred samotným spustením funkcie main. Takže odpoveď je taká, že alokovať pamäť pre premennú r nemusíš preto, lebo to za teba spravil už niekto iný.

Smerník p ukazuje po priradení výsledku funkcie malloc na začiatok pamäte veľkosti 1 bajt. Samozrejme, že to nestačí na to, aby si tam narval 12 bajtov pomocou funkcie strcpy. Stane sa jednoducho to, že sa prepíše aj pamäť za miestom alokovaným funkciou malloc. V prípade, že do tohto miesta môžeš zapisovať, tak program nespadne hneď. Ale tým, že si prepíšeš iné dáta, je pravdepodobné, že sa to zosype neskôr. Takýmto spôsobom si môžeš prepísať nielen iné dáta, ale aj napr. kód programu, čím môžeš šikovnému útočníkovi umožniť vykonávať ľubovoľný kód v rámci tvojho procesu.

Funkcia strcpy dáva na koniec aj znak '\0', takže bude na tom 12-tom mieste. Mimochodom, bezpečnejšie je v takýchto prípadoch používať funkciu strncpy, kde môžeš určiť aj maximálnu dĺžku kopírovaného reťazca. V programe ti chýba jedno volanie free, aj keď v tomto konkrétnom prípade je to jedno.

Len pre úplnosť, pri alokovaní pomocou funkcie malloc v jazyku C nemusíš pretypovať výsledok na smerník konkrétneho typu. Keď to ale kompiluješ kompilátorom C++, tak to tam nechaj.

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