Cómo usar la función MALLOC para crear una matriz de estructuras

Cómo usar la función MALLOC para crear una matriz de estructuras

La estructura es un tipo de datos similar a la matriz utilizada en la programación C, pero la única diferencia es que una matriz contiene los valores del mismo tipo de datos, mientras que la estructura contiene los valores sobre la base de los tipos de datos definidos por el usuario. Las matrices ocuparon algunos espacios en la memoria del sistema que puede ser dinámico o estático. La función malloc () se usa para la declaración de la memoria dinámica.

Se puede declarar una matriz de una estructura utilizando la memoria estática o la memoria dinámica, en este artículo, discutiremos la matriz de estructuras utilizando la función MALLOC ().

Cómo crear una variedad de estructuras con la función MALLOC en C

Las estructuras en la programación C se usan de manera similar a las clases. El tiempo de ejecución de las estructuras es relativamente más rápido que las clases. Para comprender la estructura, considere el ejemplo:

1
2
3
4
5
6
7
Empleados de estructura
int emp_id;
char emp_name;
;

Tenemos una estructura de "empleados"Que tiene dos miembros más; emp_int y emp_char. Podemos formar una matriz utilizando los empleados de Struct como:

1
Struct Employee EmployeeData [4];

Hemos declarado una matriz "Data de empleados"Usando la estructura"empleados"Y tiene 4 ubicaciones para almacenar los valores. Si queremos acceder a los segundos elementos de la matriz de estructura que utilizaremos, EmployseData [1], y de manera similar si queremos acceder a los miembros de los elementos que usaremos, EmployseData [1].emp_id.

Pero aquí también podemos usar la función malloc () para usar la asignación de memoria dinámica. La ventaja de la memoria dinámica es que utiliza el espacio durante la ejecución del programa de acuerdo con el requisito. Para esto, usamos la función MALLOC (), que envía la solicitud de asignar un bloque de memoria al segmento de almacenamiento de la memoria que almacena los datos al azar. Si la memoria del montón no puede entretener la solicitud de malloc () debido al espacio insuficiente, devuelve el nulo de lo contrario asigna el bloque solicitado a la función MALLOC () para la ejecución del programa.

Ahora, si queremos usar la función malloc () para la declaración de la matriz de estructura, el programa será:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#incluir
#incluir
int main (int argc, char ** argv)

estructura typedef

char* emp_name;
int emp_id;
Empleados;
int num = 2, i;
Empleados * EmploysesData = Malloc (num * sizeof * EmploysesData);
para (i = 0; i < num; i++)

EmployeeData [i].emp_name = (char*) malloc (sizeof (char*));
printf ("Ingrese el nombre del empleado:");
scanf ("%s", empleadodata [i].emp_name);
printf ("Ingrese la identificación del empleado:");
scanf ("%d", y empleados data [i].emp_id);

printf ("Por favor ingrese todos los nombres del máximo 8 caracteres \ n");
para (i = 0; i < num; i++)
printf ("Nombre del empleado: %s, ID de empleados: %d \ n", EmployseData [i].Emp_Name, EmployseData [i].emp_id);
GRATUITO (EmployeeData);
return (0);

Abriremos un archivo de texto, MyFile1, con la ayuda de Nano Editor y pegaremos el script anterior:

1
$ nano myfile1.C

Use el compilador GCC para compilar el archivo anterior:

1
$ GCC myFile1.c -o myFile1

Una vez que el archivo se compila correctamente, ejecute el programa usando el comando:

1
ps ./myFile1

La explicación del código anterior es:

  • Primero, hemos agregado las bibliotecas de stdlib.H (utilizado para las funciones de asignación de memoria dinámica) y stdio.H (utilizado por las otras funciones básicas de la programación C)
  • Luego, en la función principal, pasamos el argc (recuento de argumentos) y el argv (vector de argumento) utilizado para los números que los usuarios ingresan y señalan los punteros de los caracteres respectivamente
  • Después de esto, hemos declarado la estructura de "Empleados"Tener dos valores emp_id y emp_name
  • Inicializó las dos variables num e i; NUM ha asignado el valor de 2 para que pueda tomar dos entradas para la estructura "empleados"
  • Luego usó la función MALLOC para asignar la memoria de acuerdo con el valor de NUM a la matriz de puntero (empleados)
  • Tomó la entrada del usuario y muestra los valores utilizando el bucle for para

Nota: Tenemos que usar el "estructura typedef"Al declarar la estructura, al usar esto no tenemos que usar la palabra clave"estructura" repetidamente.

Otra cosa a tener en cuenta es que puede hacer que el búfer se desborde porque hemos usado el "charla"Dentro del argumento de Malloc para declarar el tamaño del nombre variable. Esto hace que el EMP_NAME se limite a 8 bytes para una arquitectura de 64 bits y 4 bytes para arquitecturas de 32 bits. Este desbordamiento del búfer no ocurre todo el tiempo (la mayoría de las veces es administrado automáticamente por el compilador en tiempo de ejecución), por lo tanto, hemos pedido al usuario que ingrese 8 caracteres máximo para el nombre del empleado solo para estar en el lado seguro.

Si no desea poner un límite a la cantidad de caracteres para el nombre del empleado, simplemente puede tomar la entrada primero para el nombre del empleado dentro del bucle for dentro de una nueva variable y luego pasar ese tamaño de variable en la función Malloc.

Conclusión

El tipo de datos de estructura en la programación C proporciona un mejor rendimiento cuando tenemos que lidiar con pequeños grupos de los mismos valores. En este artículo, hemos discutido la creación de estructuras con matrices utilizando la función de memoria dinámica que es la función malloc (). La función malloc () usa solo ese bloque de memoria que se requiere.