Como usar a função malloc para criar uma matriz de estruturas

Como usar a função malloc para criar uma matriz de estruturas

A estrutura é um tipo de dados semelhante à matriz usada na programação C, mas a única diferença é que uma matriz contém os valores do mesmo tipo de dados, enquanto a estrutura contém os valores com base nos tipos de dados definidos pelo usuário. As matrizes ocupavam alguns espaços na memória do sistema que podem ser dinâmicos ou estáticos. A função malloc () é usada para a declaração da memória dinâmica.

Uma matriz de uma estrutura pode ser declarada usando a memória estática ou a memória dinâmica, nesta redação, discutiremos a matriz de estruturas usando a função malloc ().

Como criar uma variedade de estruturas com a função malloc em c

As estruturas na programação C são usadas de maneira semelhante às classes. O tempo de execução das estruturas é relativamente mais rápido que as classes. Para entender a estrutura, considere o exemplo:

1
2
3
4
5
6
7
funcionários da estrutura
int emp_id;
char emp_name;
;

Temos uma estrutura de “funcionários”, Que tem mais dois membros; EMP_INT e EMP_CHAR. Podemos formar uma matriz usando os funcionários da estrutura como:

1
STRUCT FUNCIONÁRIOS DO FUNCIONÁRIODATA [4];

Nós declaramos uma matriz “FuncionáriosData”Usando a estrutura“funcionários”E tem 4 locais para armazenar os valores. Se quisermos acessar os segundos elementos da matriz STRUT que usaremos, Funcionários Data [1] e, da mesma forma.emp_id.

Mas aqui também podemos usar a função malloc () para usar a alocação de memória dinâmica. A vantagem da memória dinâmica é que ela utiliza o espaço durante a execução do programa de acordo com o requisito. Para isso, usamos a função malloc (), que envia a solicitação para atribuir um bloco de memória ao segmento de heap da memória que armazena os dados aleatoriamente. Se a memória da heap não puder entreter a solicitação de malloc () devido ao espaço insuficiente, ele retornará o nulo, caso contrário, atribui o bloco solicitado à função malloc () para a execução do programa.

Agora, se quisermos usar a função malloc () para a declaração da matriz de struct, o programa será:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)

typedef struct

char* emp_name;
int emp_id;
Funcionários;
int num = 2, i;
Funcionários * funcionáriosData = malloc (num * sizeof * funcionáriosdatos);
para (i = 0; i < num; i++)

funcionáriosdata [i].emp_name = (char*) malloc (sizeof (char*));
printf ("Digite o nome do funcionário:");
scanf ("%s", funcionáriosdata [i].emp_name);
printf ("Digite ID do funcionário:");
scanf ("%d", & funcionáriosdata [i].emp_id);

printf (“Por favor, insira todos os nomes do máximo de 8 caracteres \ n”);
para (i = 0; i < num; i++)
printf ("Nome do funcionário: %s, funcionários ID: %d \ n", funcionáriosdata [i].emp_name, funcionáriosdata [i].emp_id);
grátis (funcionáriosData);
retornar (0);

Abriremos um arquivo de texto, MyFile1, com a ajuda do editor de nano e cole o script acima:

1
$ nano myfile1.c

Use o compilador GCC para compilar o arquivo acima:

1
$ gcc myfile1.C -O MyFile1

Depois que o arquivo for compilado com sucesso, execute o programa usando o comando:

1
$ ./myfile1

A explicação do código acima é:

  • Primeiro, adicionamos as bibliotecas de stdlib.H (usado para as funções de alocação de memória dinâmica) e stdio.H (usado pelas outras funções básicas da programação C)
  • Então, na função principal, passamos pelo ARGC (contagem de argumentos) e argv (vetor de argumento) usados ​​para os números que são inseridos pelos usuários e apontam para os ponteiros do personagem, respectivamente,
  • Depois disso, declaramos a estrutura de “Funcionários”Tendo dois valores emp_id e emp_name
  • Inicializou as duas variáveis ​​num e i; A NUM atribuiu o valor de 2 para que possam levar duas entradas para a estrutura de "funcionários"
  • Em seguida, usei a função malloc para atribuir a memória de acordo com o valor de num à matriz de ponteiro (funcionários)
  • Pegou a entrada do usuário e exiba os valores usando o loop for for

Observação: Temos que usar o “typedef struct”Ao declarar a estrutura, usando isso, não precisamos usar a palavra -chave“estrutura”Repetidamente.

Outra coisa a ser observada é que ele pode fazer com que o buffer transborque porque usamos o “Caracteres *”Dentro do argumento malloc para declarar o tamanho do EMP_NAME variável. Isso faz com que o EMP_NAME seja limitado a 8 bytes para arquitetura de 64 bits e 4- bytes para arquiteturas de 32 bits. Esse transbordamento de buffer não ocorre o tempo todo (na maioria das vezes é gerenciado automaticamente pelo compilador no tempo de execução), portanto, levamos ao usuário a inserir 8 caracteres no máximo para o nome do funcionário apenas para estar do lado seguro.

Se você não deseja colocar um limite no número de caracteres para o nome do funcionário, poderá simplesmente levar a entrada primeiro para o nome do funcionário dentro do loop for dentro de uma nova variável e depois passar esse tamanho variável na função malloc.

Conclusão

O tipo de dados da estrutura na programação C oferece melhor desempenho quando precisamos lidar com pequenos grupos dos mesmos valores. Nesta redação, discutimos a criação de estruturas com matrizes usando a função de memória dinâmica que é a função malloc (). A função MALLOC () usa apenas tanto bloco de memória que é necessário.