malloc(), free() a typy

Sekcia: Programovanie 26.04.2010 | 16:42
Avatar Grawp   Používateľ
V knižke od Pavla Herouta je bežne pretypovávaná výstupný typ funkcie malloc na nejaký daný typ a naopak free je volaná len s pointerom na void. x = (int *) malloc(blablaba)
free((void *)x)
Prečo je tomu tak?
A prečo nepracovať len s pointermi typu void?
    • Re: malloc(), free() a typy 26.04.2010 | 19:04
      still   Návštevník
      void* je vseobecny typ ukazovatela.
      int * je uz konkretny typ ukazovatela.
      spolocne maju to, ze su v pamati reprezentovane uplne rovnako (32bitov na 32-bitovom systeme, 64b na 64-bit). Rozdiel je v tom ako sa k nim bude spravat kompiler. Podla typu mas potom "povolene" metody/operatory danej triedy/daneho typu, teda konkretny kus kodu, ktory sa ma vykonat pri praci s nulami a jednickami, kam ti dany ukazovatel v pamati ukazuje.

      Takze vyhoda pointeru typu void* - ako parameter mozes predavat lubovolny typ (ako druhy parameter je dobre pouzit sizeof typu, aby si nezapisoval niekam mimo)
      Nevyhoda pointeru typu void* - nevies ake operacie a akym sposobom mozes s danym typom vykonavat.
      • Re: malloc(), free() a typy 26.04.2010 | 21:08
        Avatar Grawp   Používateľ
        nejak mi to vcera nedoplo... samozrejme x++ spravi nieco ine ak bude typ *void a ak bude typ *int (teda pokial neni int jeden byte).
        no comment.

        Thanks anyway. (a pekne vysvetlene)
    • Re: malloc(), free() a typy 26.04.2010 | 19:15
      Avatar Ondrej Danko Debian | Fedora  Používateľ

      prototypy funkcii: void *malloc(size_t size);
      void free(void *ptr);

      lebo malloc vracia iba void pointer, kt. je nasledne pretypovany na tvoj pozadovany typ (cize ak chces s void pointerom pracovat vzdy ho treba pretypovat)