Escolar Documentos
Profissional Documentos
Cultura Documentos
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 1/15
24/10/22, 22:27 Aula 3 - Alocação Dinâmica de Memória - Prof. Fernando De Siqueira - Estrutura de Dados
O Uso da memória
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 3/15
24/10/22, 22:27 Aula 3 - Alocação Dinâmica de Memória - Prof. Fernando De Siqueira - Estrutura de Dados
Função malloc
Função calloc
Função realloc
Função free
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 5/15
24/10/22, 22:27 Aula 3 - Alocação Dinâmica de Memória - Prof. Fernando De Siqueira - Estrutura de Dados
é equivalente a:
int *aVetor;
aVetor = (int *) malloc(10 * sizeof(int *));
int *v;
v = malloc(10*4);
O Operador sizeof()
v = malloc(10*sizeof(int));
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 7/15
24/10/22, 22:27 Aula 3 - Alocação Dinâmica de Memória - Prof. Fernando De Siqueira - Estrutura de Dados
...
v = (int*) malloc (10*sizeof(int));
if (v == NULL)
{
printf(“Memoria insuficiente.\n”);
exit(1);
}
...
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 8/15
24/10/22, 22:27 Aula 3 - Alocação Dinâmica de Memória - Prof. Fernando De Siqueira - Estrutura de Dados
free (v);
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main() {
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 9/15
24/10/22, 22:27 Aula 3 - Alocação Dinâmica de Memória - Prof. Fernando De Siqueira - Estrutura de Dados
int i, n;
float *v;
float med, var;
printf("Quantas notas serão lidas?: ");
scanf("%i",&n);
/*alocação dinâmica*/
v = (float*) malloc (n*sizeof(float));
/* Impressao do resultado */
printf("Media: %.2f Variancia: %.2f \n", med, var);
getche();
/*libera memória*/
free(v);
return 0;
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main() {
1 int *p, *q;
2 int x;
3 p = (int*) malloc(sizeof(int)); // aloca
dinamicamente uma variavel do tipo inteiro ( a
variavel é um ponteiro )
4 *p = 3; // armazena 3 na
variavel p do tipo inteiro
5 q = p; // faz o ponteiro q
receber o ponteiro p alocado
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 10/15
24/10/22, 22:27 Aula 3 - Alocação Dinâmica de Memória - Prof. Fernando De Siqueira - Estrutura de Dados
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 11/15
24/10/22, 22:27 Aula 3 - Alocação Dinâmica de Memória - Prof. Fernando De Siqueira - Estrutura de Dados
/* programa_memoria_01.c */
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *p;
int i,k, n;
printf("\nDigite a quantidade de numeros que serao
digitados ->");.
scanf("%d", &i);
/*
A função malloc reserva espaço suiciente para um
vetor de inteiros.
Caso sejam digitados 5 elementos, serão
reservados 20 bytes, pois cada
inteiro ocupa 4 bytes na memória
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 12/15
24/10/22, 22:27 Aula 3 - Alocação Dinâmica de Memória - Prof. Fernando De Siqueira - Estrutura de Dados
*/
p = (int *)(malloc(i*sizeof(int)));
if( p == NULL ) {
printf("\nErro de alocacao de memoria");
exit(1);
}
for( k=0;k<i;k++) {
printf("Digite o numero para o indice %d ->",
k);
scanf("%d", &p[k]);
}
for( k=0;k<i;k++) {
printf("O numero do indice %d eh %d\n", k,
p[k]);
}
printf("\nDigite quantos elementos quer adicionar
ao vetor ->");
scanf("%d", &n);
/* A função realloc aumenta ou diminui o tamanho
do vetor dinamicamente. Ela recebe o ponteiro para o
vetor anterior e retorna o novo espaço alocado. */
p = (int *)(realloc(p,(i+n)*sizeof(int)));
if( p == NULL ) {
printf("\nErro de re-alocacao de memoria");
exit(1);
}
for(k=0;k<(n+i);k++) {
printf("Digite o numero para o indice %d ->",
k);
scanf("%d", &p[k]);
}
for( k=0;k<(i+n);k++) {
printf("O numero do indice %d eh %d\n", k,
p[k]);
}
free(p);
return 0;
}
/* programa_memoria_03.c */
#include <stdio.h>
. #include <stdlib.h>
struct ST_DADOS {
char nome[40];
float salario;
int main(void) {
/* ponteiro para a estrutura */
struct ST_DADOS * p;
..
/* alocação de memória para o ponteiro da
estrutura */
p = (struct ST_DADOS *) malloc(sizeof(struct
ST_DADOS));
free(p);
getche();
return 0;
}
https://sites.google.com/site/proffdesiqueiraed/aulas/aula-2---alocacao-dinamica-de-memoria 15/15