alocacao-dinamica
DESCRIPTION
Alocação dinamicaTRANSCRIPT
-
Alo
cao D
inm
ica d
e
Mem
ri
a
Algo
ritm
os
e Es
trutu
ra de
D
ado
s II
DCC
-
UFM
G
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Alo
cao E
stti
ca x
Din
m
ica
Li
ngu
age
ns
de pr
ogr
am
ao
co
mo
Pa
sca
l, C
e C+
+
perm
item
do
is tip
os
de a
loca
o
de
m
emr
ia:
Est
tica
e
D
inm
ica
N
a a
loca
o
e
stt
ica
, o
e
spa
o de
m
em
ria
pa
ra a
s va
rive
is
rese
rvad
o n
o in
cio
da
e
xecu
o
, n
o
pode
ndo
se
r a
ltera
do de
pois
in
t a; i
nt b
[20];
N
a a
loca
o
di
nm
ica
, o
e
spa
o de
m
emr
ia pa
ra
as
vari
veis
po
de se
r a
loca
do di
na
mic
ame
nte
dura
nte
a
e
xecu
o
do
pr
ogr
ama
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Alo
cao D
inm
ica
A
mem
ria
al
oca
da di
nam
icam
ente
ace
ssad
a atra
vs
de A
pon
tado
res
(poin
ters
) qu
e na ve
rdad
e s
o va
rive
is qu
e ar
maze
nam
o ende
reo
de
um
a r
ea de
m
em
ria
A
mem
ria
al
oca
da di
nam
icam
ente
fa
z pa
rte
de um
a r
ea de
m
em
ria
ch
am
ada
he
ap
Basi
cam
ente
, o
pr
ogr
am
a a
loca
e
de
salo
ca
por
es
de m
emr
ia do
he
ap
dura
nte
a
e
xecu
o
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Alo
cao D
inm
ica
a
Hea
pM
emr
ia Es
ttic
a
100x214
0x218
0x222
0x226
0x230
0x234
0x238
0x242
0x246
a
um
in
tb
u
m ap
on
tado
r pa
ra u
m in
t
b0x
234
10
0x016
0x020
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Ap
on
tad
ore
s
Nota
o e
m C
de
fini
o de
p
com
o um
ap
onta
dor
para
um
a va
rive
l do tip
o T
T
*p;
Al
oca
o de
m
em
ria
pa
ra um
a va
rive
l apo
nta
da po
r p
p
= (T
*) m
allo
c(siz
eof(T
));
Desa
loca
o
de m
em
ria
fre
e(p)
;
Conte
udo
da
va
rive
l apo
nta
da po
r P
*p;
Va
lor
nulo
pa
ra um
apo
nta
dor
null;
En
dere
o de
um
a va
rive
l a
&a;
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Alo
cao D
inm
ica
int *
a,*c,
b;... b =
10
;a =
(in
t *) m
allo
c(siz
eof(in
t));
c =
a;
*a =
20
;fre
e(a)
a =
&b
;*a =
30
; //
qual o
va
lor
de b?
a
20
b
Hea
pM
emr
ia
Est
tica
10
X
30
Mem
ria
n
o fo
i de
salo
cada
. O
esp
ao
co
ntin
ua
ocu
padoc
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Err
os
Co
mu
ns
Es
quec
er de
al
oca
r m
emr
ia e
ten
tar
aces
sar
o co
nte
do
da
var
ivel
Co
piar
o va
lor
do apo
nta
dor
ao in
vs
do va
lor
da va
rive
l apo
nta
da
Esqu
ece
r de
de
salo
car
mem
ria
El
a
desa
loca
da a
o fim
do
pr
ogr
ama
o
u
pro
cedi
men
to fu
n
o o
nde
a
va
rive
l est
de
cla
rada
, m
as
pode
se
r u
m pr
obl
em
a e
m lo
ops
Te
nta
r ace
ssar
o co
nte
do da
va
rive
l depo
is
de de
salo
c-la
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Exerc
cio
: O
qu
e v
ai
ser
imp
ress
o?
double a;
double *p, *q;
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);
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Perg
un
ta q
ue n
o q
uer
cala
r...
int *
an
o
a de
clara
o de
um
ve
tor
de in
t?
Em
C,
to
do ve
tor
um
apo
nta
dor.
Po
rtanto
po
de-se
fa
zer
cois
as
com
o:
int a[10], *b;
b = a;
b[5] = 100;
Printf(%d\n, a[5]);
Printf(%d\n, b[5]);
int a[10], *b;
b = (int *) malloc(10*sizeof(int));
b[5] = 100;
printf(%d\n, a[5]);
Printf(%d\n, b[5]);
100
100
4265
710
0O
bs. N
o se
po
de fa
zer
a =
b
no exe
mpl
o aci
ma
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Ap
on
tad
ore
s p
ara
Tip
os
Est
rutu
rad
os
Ap
onta
dore
s s
o norm
alm
ente
util
izado
s co
m tip
os
est
rutu
rado
s
Typedef struct {
int idade;
double salario;
} TRegistro
TRegistro *a;
...
a = (TRegistro *) malloc(sizeof(TRegistro))
a->idade = 30;
a->salario = 80;
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Pass
ag
em
de P
ar
metr
os
Em
pa
scal
e
C+
+, pa
rm
etro
s pa
ra fu
n
o po
dem
ser
pass
ado
s po
r va
lor
ou
po
r re
fer
nci
a
Po
r v
alo
r:o
pa
rm
etro
fo
rma
l (re
cebi
do n
o pr
oce
dim
en
to)
u
ma
cpi
ado
pa
rm
etro
re
al (p
ass
ado
n
a ch
am
ada
)
Por
refe
rn
cia:
o pa
rm
etro
fo
rma
l (re
cebi
do n
o
pro
cedi
me
nto
) u
ma
refe
rn
cia
para
o
pa
rm
etro
re
al
(pass
ado
n
a ch
am
ada
)
As m
odi
fica
es
efe
tuada
s ac
onte
cem
no pa
rm
etro
re
al
Em
C
s ex
iste
pa
ssa
gem
po
r va
lor,
lo
go de
ve-se
impl
eme
nta
r a
pa
ssag
em
po
r re
fer
nci
a u
tiliz
an
do-
se a
pon
tado
res
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Pass
ag
em
de P
ar
metr
os
(C)
void SomaUm(int x, int *y)
{ x = x + 1;
*y = (*y) + 1;
printf("Funcao SomaUm: %d %d\n", x, *y);
} int main()
{ int a=0, b=0;
int *c;
c = &b;
SomaUm(a, c);
printf("Programa principal: %d %d\n", a, b);
}
1 1
0 1
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Pass
ag
em
de P
ar
metr
os
E
para
a
loca
r m
em
ria
de
ntro
de
u
m pr
oce
dim
en
to?
Em
pa
sca
l, ba
sta
pa
ssa
r a
va
rive
l (apo
nta
dor)
com
o
refe
rn
cia
.
Em
C
tam
bm
, m
as
com
o n
o h
pa
ssa
gem
po
r re
fer
nci
a
as
cois
as
so
u
m po
uco
m
ais
co
mpl
ica
das
void
alo
ca(i
nt *x, in
t n)
{ x=(i
nt *)m
all
oc(n
*siz
eof(
int))
;x[0
] = 20
;} in
t main
()
{ in
t *a;
alo
ca(a
, 10
);
a[1
] = 40
;}
Erro
r!Ac
cess
Vi
ola
tion
!
void
alo
ca(i
nt **x, in
t n)
{ *x=(i
nt *)m
all
oc(n
*siz
eof(
int))
;if
(*
x == NULL)
prin
tf(
ERROR!!!!\n
);
els
e
*x[0
] = 20
;} in
t main
()
{ in
t *a, **b;
b = &a;
alo
ca(b
, 10
);
a[1
] = 40
;}
OK
-
Alg
ori
tmos
e E
stru
tura
de D
ad
os
II
Exerc
cio
s
1.Fa
a um
pr
ogr
am
a qu
e le
ia um
va
lor
n,cr
ie
dinam
icam
ente
um
ve
tor
de n ele
mento
s e
pass
e ess
e ve
tor
para
um
a fu
n
o qu
e va
i le
r os
ele
mento
s de
sse ve
tor.
2.D
ecla
re um
Ti
poR
egis
tro, co
m ca
mpo
s a
inte
iro e b
que
um
apo
nta
dor
para
ch
ar.
No se
u pr
ogr
am
a cr
ie di
nam
icam
ente
um
a
vria
vel d
o Ti
poR
egi
stro
e atri
bua os
valo
res
10 e x
aos
se
us
cam
pos.