Professional Documents
Culture Documents
DCC - UFMG
Alocao Dinmica de
Memria
Alocao Dinmica
10
a um int
b um apontador para um int
0x020 b 0x234
0x016 a
Memria Esttica
Alocao Dinmica
10
Heap
0x246
0x242
0x238
0x234
0x230
0x226
0x222
0x218
0x214
T *p;
p = (T*) malloc(sizeof(T));
free(p);
*p;
null;
&a;
Desalocao de memria
Apontadores Notao em C
int *a,*c, b;
...
b = 10;
a = (int *) malloc(sizeof(int));
c = a;
*a = 20;
free(a)
a = &b;
*a = 30; // qual o valor de b?
Alocao Dinmica
Memria no foi
desalocada. O
espao continua
ocupado
b 10
30
Memria
Esttica
20
Heap
Erros Comuns
a = 3.14;
printf("%f\n", a);
p = &a;
*p = 2.718;
printf("%f\n", a);
a = 5;
printf("%f\n", *p);
p = NULL;
p = (double *)malloc(sizeof(double));
*p = 20;
q = p;
printf("%f\n", *p);
printf("%f\n", a);
free(p);
printf("%f\n", *q);
double a;
double *p, *q;
100
100
42657
100
TRegistro *a;
...
a = (TRegistro *) malloc(sizeof(TRegistro))
a->idade = 30;
a->salario = 80;
Typedef struct {
int idade;
double salario;
} TRegistro
Passagem de Parmetros
int main()
{
int a=0, b=0;
int *c;
c = &b;
SomaUm(a, c);
printf("Programa principal: %d %d\n", a,
0 1b);
}
Passagem de Parmetros
Exerccios