¿Cuál es la diferencia entre "calloc(...)" y "malloc(...)"

¿Cuál es la diferencia entre "calloc(...)" y "malloc(...)"

La función Malloc() se utiliza para asignar memoria, el prototipo es el siguiente:

Void * malloc (número entero sin signo);

Malloc(…) toma solo un argumento, que es el tamaño deseado de memoria. Esta función toma la cantidad de bytes que asignamos (a), asigna memoria y devuelve un puntero void * asignado al primer byte. Un puntero void * se puede asignar a cualquier tipo de puntero. malloc() devuelve un puntero nulo si no hay suficiente memoria para asignar la memoria solicitada. malloc(…) asigna bytes de memoria en lugar de bloques de memoria como lo hace calloc(…).

Índice
  1. Ejemplo de asignación dinámica con malloc():

Ejemplo de asignación dinámica con malloc():

#include stdio.h #include stdlib.h /* use malloc() */ main ( void ) { int * p; int a; int i;... /* determina un valor en alguna parte */ p = ( int * ) malloc ( a * sizeof ( int )); /* asigna el entero p que ahora se puede ver como un vector de posiciones */ if (! p ) { printf ("**Error: sin memoria**"); exit; } for ( i = 0; ia; i++) /* p puede verse como un vector con posiciones */ p[i] = i * i;...return 0; }

En el ejemplo anterior, está asignando suficiente memoria para almacenar el número entero. El operador sizeof() devuelve el tamaño de un entero en bytes. Conocer el tamaño de un tipo es útil.

El puntero devuelto por void * malloc() se convierte en un int * y se asigna a p. La siguiente declaración prueba si la operación fue exitosa. Si no, p tiene un valor nulo, lo que hace que !P devuelva verdadero. Si la operación tiene éxito, podemos usar todo el vector asignado normalmente, por ejemplo, indexando p[0] ap[(a-1)].

La función Calloc() también se usa para asignar memoria, pero con un prototipo ligeramente diferente:

Void * calloc (int a sin firmar, tamaño int sin firmar);

La cantidad de memoria asignada por esta función es igual a un tamaño *, es decir, se asigna suficiente memoria para un vector de objetos de un tamaño.

Devuelve un puntero void * al primer byte asignado. Un puntero void * se puede asignar a cualquier tipo de puntero.

La función calloc() devuelve un puntero nulo si no hay suficiente memoria para asignar memoria. Los bloques se inicializan a 0 de forma predeterminada. La cantidad total de memoria asignada será (número_de_elementos * tamaño).

Otro ejemplo de asignación dinámica con calloc():

#include stdio.h 
#include stdlib.h /* use calloc() */ 
main ( void ) { 
int * p; 
int a; 
int i;
... /* determina un valor en alguna parte */ 
p = ( int * ) calloc ( a, sizeof ( int )); /* asigna el entero p que ahora se puede ver como un vector de posiciones */ 
if (! p ) { 
printf ( "**Error: sin memoria**"); 
exit; 
} 
for ( i = 0; ia; i++) /* p puede verse como un vector con posiciones */ 
p[i] = i*i;
...
return 0; 
}

En el ejemplo anterior, la memoria asignada es suficiente para contener el número entero. El operador sizeof() devuelve el tamaño de un entero en bytes.

Puedes leer:  Holistic Testing con Matrices

Conocer el tamaño de un tipo es útil. El puntero void * devuelto por calloc() se convierte en un int * y se convierte en p. La siguiente declaración prueba si la operación fue exitosa.

Si no, p tiene un valor nulo, lo que resultará en ! P devuelve verdadero. Si la operación tiene éxito, podemos usar todo el vector asignado normalmente, por ejemplo, indexando p[0] ap[(a-1)].


Si quieres conocer otros artículos parecidos a ¿Cuál es la diferencia entre "calloc(...)" y "malloc(...)" puedes visitar la categoría Desarrollo.

Entradas Relacionadas 👇👇

Go up