Calloc en C

Calloc en C
“Se dice que la utilización y asignación de memoria o espacio en un sistema es lo más importante en cualquier script de programación cuando tiene muchos datos en forma de variables y matrices. El lenguaje C es muy dinámico cuando se trata de asignar memoria, ya que contiene muchas funciones específicas de la memoria. Una de esas funciones es calloc (). La asignación contigua es otro nombre para el "Calloc". Este método de lenguaje C asigna la memoria dinámica para un determinado tipo. Esta técnica se utiliza para asignar dinámicamente el número deseado de bloques de memoria de un tipo particular."

Este enfoque es bastante similar al método Malloc del lenguaje C, pero hay dos diferencias que se dan a continuación:

  1. Cada bloque en esta función recibe una inicialización cero y se asigna un tipo específico.
  2. En comparación con Malloc, contiene dos argumentos o parámetros.

Sintaxis

(type*) calloc (n, tamaño);

Podemos lanzar la memoria devuelta a cualquier tipo de memoria apropiado porque esta función devuelve un puntero void a la dirección necesaria en la memoria. Por ejemplo:

ptr = (int*) calloc (20, sizeof (int));

El código anterior se utiliza para asignar 20 bloques contiguos de memoria del tamaño de un entero, cada uno que contiene 20 elementos.

Ejemplo 1

Comencemos por escribir un código simple. En este ejemplo, usamos Visual Studio para crear un proyecto C vacío y agregar un archivo llamado ForKExample.C en el directorio/carpeta de archivos de origen. Examine el código en la sección a continuación. Las dos primeras líneas en la muestra a continuación se utilizan para incluir los archivos de encabezado necesarios. Entonces, comienza la función principal. Tome nota del uso de (flotante*) para cambiar el puntero vacío en un puntero flotante. Este comando dentro de la función principal asigna un espacio de memoria contiguo utilizando la función Calloc para 25 elementos, cada uno de los tamaños de flotación.

Dado que esta memoria es dinámica, se asignará cuando se ejecute el archivo; Sin embargo, se lanzará después de que se complete el ciclo de ejecución del programa. Solo demuestra cómo se puede llevar a cabo una asignación de memoria utilizando la función Calloc; No se presentará una salida específica al usuario en la pantalla ya que no se utiliza ninguna función printf. La declaración condicional debe usarse para determinar si la memoria ha sido asignada o no.

#incluir
#incluir
int main ()
float* a = (float*) calloc (25, sizeOf (float));
regresar 0;

Ejemplo 2

Las dos primeras líneas del código de muestra a continuación incluyen los archivos de encabezado necesarios. El método principal comienza. En la primera línea de la función principal, lanzamos el tipo de datos de puntos a un entero y usamos la función Calloc para asignar 25 bloques de memoria con un tamaño de entero. Hemos declarado una variable de tipo entero en la siguiente línea, que luego emplearemos para mostrar la salida en la pantalla. En la siguiente oración, usamos la condición if para determinar si el punto de calloc devuelve un valor nulo o no. Solo en esas circunstancias, como cuando una asignación falla o el espacio de memoria no se asigna, el valor nulo regresa.

En esa situación, usamos la función printf para mostrar el mensaje "memoria no permitida" o "calloc no pudo asignar la memoria."Mostramos el mensaje de éxito en la pantalla de otra manera. La entrada del usuario se recopila en la siguiente línea y se almacena en la variable declarada anterior.

#incluir
#incluir
int main ()
int* pointer = (int*) calloc (25, sizeof (int));
int a;
if (pointer == null)
printf ("Memoria no asignada.\ n ");
demás
printf ("Memoria asignada correctamente usando la función Calloc.\ n ");
scanf ("%d", & a);
regresar 0;

Aquí está la salida de pantalla que muestra que el método Calloc asigna con éxito la memoria.

Intentemos fallar este procedimiento haciendo un pequeño cambio en el código que se muestra arriba. Para hacer esto, debemos aumentar el tamaño del número de elementos que requieren este tamaño. Este código modificado solo modifica la primera línea del método principal, establece el número de elementos y pasa el valor 250000000000000000000 a la función Calloc.

#incluir
#incluir
int main ()
int* pointer = (int*) calloc (25000000000000000000000, sizeof (int));
int a;
if (pointer == null)
printf ("Memoria no asignada.\ n ");
demás
printf ("Memoria asignada correctamente usando la función Calloc.\ n ");
scanf ("%d", & a);
regresar 0;

El programa se ejecuta correctamente cuando ejecutamos el código, pero el Calloc devuelve NULL, lo que indica que el programa no puede asignar la cantidad de memoria solicitada.

Ejemplo 3

En este ejemplo, estamos solicitando la entrada del usuario con respecto al número de elementos necesarios para almacenar los bloques de memoria. Los archivos de encabezado necesarios se incluyen en las dos primeras líneas del archivo. La función principal () principal comienza. Declaramos 4 variables de tipo entero en la función principal, la primera de las cuales es una variable de tipo de puntero que se usa principalmente para almacenar la salida de la función Calloc. El resto de las variables son enteros simples. Se le solicita al cliente que ingrese el número de elementos para los cuales la asignación de memoria es necesaria para la siguiente línea.

Para la asignación del tamaño del bloque de memoria, estamos utilizando la función sizeOf para obtener el tamaño del tipo de datos enteros. La entrada entera de entero del usuario se obtiene utilizando la función scanf. Luego se verifica la salida de la función Calloc para determinar si fue exitoso o no. Si el proceso de asignación de memoria es exitoso, no se devuelven los valores nulos. Si se encuentra el resultado, mostramos un mensaje de éxito y luego utilizamos un bucle for para solicitar al usuario sus marcas en todas las materias.

#incluir
#incluir
int main ()
int* puntero;
int nelements, marcas;
int sum = 0;
printf ("Ingrese el número de elementos (datos de los sujetos) requeridos:");
scanf ("%d" y nelements);
pointer = (int*) calloc (nelements, sizeof (int));
if (pointer == null)
printf ("Memoria no asignada.\norte");
salida (0);
demás
printf ("Memoria asignada correctamente usando la función Calloc.\norte");
para (int i = 0; i < nElements; i++);
int marcas = 0;

Mostraremos la puntuación general del usuario utilizando la variable de asignación de memoria. Por lo tanto, solicitamos al usuario que ingrese el número de elementos o sujetos para los cuales la asignación de memoria es necesaria en primer lugar solo para ese propósito. Después de que la memoria se haya asignado correctamente, utilizamos una variable de puntero para almacenar las marcas de los temas. Las marcas para cada sujeto se muestran más adelante en el bucle for, y la suma de las marcas se muestra al final utilizando el bucle para ejecutar la función de suma.

printf ("Ingrese las marcas de sujeto (%d):", i);
scanf ("%d" y marcas);
puntero [i] = marcas;
printf ("Las materias del estudiante marca \ n");
para (int i = 0; i < nElements; ++i)
printf ("sujeto %d - [ %d] \ n", (i+1), Poinyer [i]);
suma = suma+puntero [i];
printf ("Marcas totales: %d", suma);

scanf ("%d%", y nelements);
regresar 0;

Aquí está la salida del código de fragmento anterior:

Conclusión

Este artículo demuestra la función de memoria de calloc en C usando tres ejemplos diferentes pero simples. Los ejemplos elaboran que si no hay un espacio de memoria insuficiente disponible, esta asignación de memoria falla y devuelve un puntero nulo, lo que indica que fue una falla a través de la función Calloc de C.