Con Con
trỏtrỏ
nângnâng
caocao
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
Con Con
trtr
nângnâng
caocao
1Kỹ thuật lập trình - Nguyễn Minh Huy
NộiNội dungdung
QuảnQuản bộbộ nhớnhớ..
Con Con trỏtrỏ nhiềunhiều cấpcấp..
CácCác loạiloại con con trỏtrỏ kháckhác..
2Kỹ thuật lập trình - Nguyễn Minh Huy
NộiNội dungdung
QuảnQuản bộbộ nhớnhớ..
Con Con trỏtrỏ nhiềunhiều cấpcấp..
CácCác loạiloại con con trỏtrỏ kháckhác..
3Kỹ thuật lập trình - Nguyễn Minh Huy
QuảnQuản bộbộ nhớnhớ
CấpCấp phátphát bộbộ nhớnhớ trongtrong C:C:
XinXin mộtmột vùngvùng nhớnhớ trongtrong RAM RAM đểđể sửsử dụngdụng..
LệnhLệnh mallocmalloc: : thưthư việnviện <<malloc.hmalloc.h>>
pháppháp: : mallocmalloc((<<sốsố byte byte cấpcấp phátphát>>));;
TrảTrả vềvề: : địađịa chỉchỉ vùngvùng nhớnhớ đượcđược cấpcấp..
intint
*p = (*p = (
intint
*) *)
mallocmalloc
2 * 2 *
sizeofsizeof
intint
) )
))
;;
intint
*p = (*p = (
intint
*) *)
mallocmalloc
2 * 2 *
sizeofsizeof
intint
) )
))
;;
PhanSoPhanSo *q = (*q = (PhanSoPhanSo *) *) mallocmalloc( ( 2 * 2 * sizeofsizeof((PhanSoPhanSo) ) ));;
4Kỹ thuật lập trình - Nguyễn Minh Huy
????
72 73 74 7572 73 74 75
????
76 77 78 7976 77 78 79
72 0 0 0
pp
44 45 46 4744 45 46 47
p + 1p + 1
????
55 56 57 5855 56 57 58
????
59 60 61 6259 60 61 62
55 0 0 0
qq
33 34 35 3633 34 35 36
q + 1q + 1
????
63 64 65 6663 64 65 66
????
67 68 69 7067 68 69 70
tutututu maumaumaumau
QuảnQuản bộbộ nhớnhớ
Thu Thu hồihồi bộbộ nhớnhớ trongtrong C:C:
TrảTrả lạilại vùngvùng nhớnhớ đãđã xinxin củacủa RAM.RAM.
QuyQuy tắctắc quảnquản bộbộ nhớnhớ củacủa C:C:
TựTự thuthu hồihồi vùngvùng nhnhớ khaikhai báobáo biếnbiến..
KhôngKhông thuthu hồihồi vùngvùng nhớnhớ tựtự cấpcấp phátphát..
LậpLập
trìnhtrình
viênviên
phảiphải
tựtự
thuthu
hồihồi
vùngvùng
nhớnhớ
cấpcấp
phátphát
LậpLập
trìnhtrình
viênviên
phảiphải
tựtự
thuthu
hồihồi
vùngvùng
nhớnhớ
cấpcấp
phátphát
QuênQuên thuthu hồihồi “Rò rỉrỉ” ” bộbộ nhớnhớ (memory leak).(memory leak).
LệnhLệnh free: free: thưthư việnviện <<malloc.hmalloc.h>>
pháppháp: : free(free(<Con <Con trỏtrỏ giữgi địađịa chi chi vùngvùng nhớnhớ>>));;
floatfloat *r = (float *) *r = (float *) mallocmalloc(( 20 * 20 * sizeofsizeof(float) (float) ));;
free(free(rr));;
5Kỹ thuật lập trình - Nguyễn Minh Huy