Visualizzazione dei risultati da 1 a 9 su 9

Discussione: malloc & calloc

  1. #1
    Utente di HTML.it L'avatar di fausto
    Registrato dal
    Jun 2002
    Messaggi
    294

    malloc & calloc

    int *p[dim]; /*array di puntatori*/

    p=(int*)calloc(dim, sizeof(int));/*alloco la memoria per un vettore*/

    P=(int*)malloc(sizeof(int*dim)) /*è equivalente al precedente oppure no?*/
    ciao,:sexpulp:

  2. #2
    Utente di HTML.it L'avatar di sersul
    Registrato dal
    Feb 2003
    Messaggi
    75
    Si, in pratica ha scritto la stessa cosa...

    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    173
    Esatto, col secondo hai allocato la stessa qtà di memoria in maniera dinamica. A differenza di malloc() calloc() invece di allocare i byte in memoria alloca gli oggetti


    CIAO

  4. #4
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Le differenze tra le due funzioni sono:
    codice:
    void * malloc (size_t SIZE)
    Alloca lo spazio di memoria specificato in SIZE usando la forma:
    codice:
    n * sizeof(tipo)
    dove n è il numero intero di locazioni da allocare, sizeof(tipo) è la dimensione in byte che avrà ogni locazione (es. sizeof(char))

    codice:
    void * calloc (size_t SIZE)
    Fa la stessa identica cosa di malloc! Le differenze sono 2:
    • Oltre ad allocare lo spazio, lo inizializza a "0".
    • la sintassi di rappresentazione del tipo SIZE

    Il primo punto: ad esempio se si alloca lo spazio per un array di interi, tale array conterrà i valori "0" per ogni elemento.

    Il secondo punto vede l'utilizzo della "," al posto di "*".

    esempio di calloc è
    codice:
    int *a;
    
    a=(int *)calloc(100,sizeof(int));
    esempio di malloc

    codice:
    int *a;
    
    a=(int *)malloc(100*sizeof(int));
    Spero sia tutto chiaro!!!!

  5. #5
    x Grunt

    c'è un errore di distrazione (in quanto nell'esempio poi è giusto) nella dichiarazione del prototipo di calloc()

    giusto per non confondere le idee, qua ci sono i prototipi:
    http://www.science.unitn.it/~fiorell...guidac118.html
    ...Terrible warlords, good warlords, and an english song

  6. #6
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Hai ragione Jhonny.....

  7. #7
    Utente di HTML.it L'avatar di fausto
    Registrato dal
    Jun 2002
    Messaggi
    294
    Grazie!
    quindi, se ho capito bene, al di là della sintassi, l'unica differenza è che calloc inizializza, malloc no.
    Quindi una matrice(dim1)(dim2) posso allocarla indifferentemente così:
    int *p;

    for (i=0; i<dim1; i++)
    p=(int *)calloc(dim2, sizeof(int));
    o anche
    p=(int *)calloc(dim2, sizeof(int)* dim1);

    o anche

    p=(int *)malloc((sizeof(int)*dim1)*dim2) forse le parentesi non servono!

    ????????????????????????????

    A questo punto, altra domandina:
    quel è la differenza fra un vettore modimensionale lungo dim1*dim2 ed una matrice dim1*dim2?
    mah!
    :sexpulp:
    forse non c'è differenza per l'allocazione, ma per l'assegnamento sì?

  8. #8
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    L'allocazione dinamica di una matrice è un po' diversa:
    codice:
    int dim1,dim2,i;
    int **p;
    
    p=(int **)malloc(dim1*sizeof(int));
    if(p!=NULL)
    {
       for(i=0;i<dim2;i++)
       {
          *p[i]=(int *)malloc(dim2*sizeof(int));
          if(*p[i]==NULL)
              exit(1);
       }
    }
    else
       exit(1);
    Puoi usare sia malloc che calloc (ovviamente).

    Per un array monodimensionale:
    codice:
    int dim1;
    int *p;
    
    p=(int *)malloc(dim1*sizeof(int));
    if(p==NULL)
       exit(1);
    Se ci sono problemi chiedi pure!!!

  9. #9
    Utente di HTML.it L'avatar di fausto
    Registrato dal
    Jun 2002
    Messaggi
    294
    no, non dovrebbero essercene.
    mi sa che ho studiato troppo.
    Sto leggendo un codice che ha delle strutture da paura; m'ha un po' confuso.
    Grazie, comunque.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.