I like nter Milan too.
B nh đ ng trong ANSI-C ộ
Toán t ửnew và delete là đ c quy n C++ và chúng không có trong ngôn ng C. Trongộ ề ữ
ngôn ng C, đ có th s d ng b nh đ ng chúng ta ph i s d ng th vi nữ ể ể ử ụ ộ ớ ộ ả ử ụ ư ệ
stdlib.h. Chúng ta s xem xét cách này vì nó cũng h p l trong C++ và nó v n cònẽ ợ ệ ẫ
đượ ử ục s d ng trong m t s chộ ố ương trình.
Hàm malloc
Đây là m t hàm t ng quát đ c p phát b nh đ ng cho con tr . C u trúc c a nó nhộ ổ ể ấ ộ ớ ộ ỏ ấ ủ ư
sau:
void * malloc (size_t nbytes);
trong đó nbytes là s byte chúng ta mu n gán cho con tr . Hàm này tr v m t con trố ố ỏ ả ề ộ ỏ
ki u ể void*, vì v y chúng ta ph i chuy n đ i ki u sang ki u c a con tr đích, ví d : ậ ả ể ổ ể ể ủ ỏ ụ
char * ronny;
ronny = (char *) malloc (10);
Đo n mã này c p phát cho con tr ạ ấ ỏronny m t kh i nh 10 byte. Khi chúng ta mu nộ ố ớ ố
ph n t mong mu n v i kích thầ ử ố ớ ướ ủc c a chúng. Th t may m n là chúng ta có toán tậ ắ ử
sizeof, toán t này tr v kích thử ả ề ướ ủc c a m t ki u d li u c th . ộ ể ữ ệ ụ ể
int * bobby;
bobby = (int *) malloc (5 * sizeof(int));
Đo n mã này c p phát cho ạ ấ bobby m t kh i nh g m 5 s nguyên ki u ộ ố ớ ồ ố ể int, kích c c aỡ ủ
ki u d li u này có th b ng 2, 4 hay h n tùy thu c vào h th ng mà chể ữ ệ ể ằ ơ ộ ệ ố ương trình được d ch. ị
Hàm calloc.
calloc ho t đ ng r t gi ng v i ạ ộ ấ ố ớ malloc, s khác nhau ch y u là khai báo m u c aự ủ ế ẫ ủ
nó:
void * calloc (size_t nelements, size_t size);
nó s d ng hai tham s thay vì m t. Hai tham s này đử ụ ố ộ ố ược nhân v i nhau đ có đớ ể ược kích thướ ổc t ng c ng c a kh i nh c n c p phát. Thông thộ ủ ố ớ ầ ấ ường tham s đ u tiênố ầ
(nelements) là s ph n t và tham s th c hai (ố ầ ử ố ứ size) là kích thướ ủc c a m i ph n t .ỗ ầ ử
Ví d , chúng ta có th đ nh nghĩa ụ ể ị bobby v i ớ calloc nh sau: ư
int * bobby;
bobby = (int *) calloc (5, sizeof(int));
M t đi m khác nhau n a gi a ộ ể ữ ữ malloc và calloc là calloc kh i t o t t c các ph n tở ạ ấ ả ầ ử
c a nó v 0. ủ ề
Hàm realloc.
Nó thay đ i kích thổ ướ ủc c a kh i nh đã đố ớ ượ ấc c p phát cho m t con tr . ộ ỏ
void * realloc (void * pointer, size_t size);
tham s ốpointer nh n vào m t con tr đã đậ ộ ỏ ượ ấc c p phát b nh hay m t con tr null,ộ ớ ộ ỏ
và size ch đ nh kích thỉ ị ướ ủc c a kh i nh m i. Hàm này s c p phát ố ớ ớ ẽ ấ size byte b nhộ ớ
cho con tr . Nó có th ph i thay đ i v v trí c a kh i nh đ có th đ ch cho kíchỏ ể ả ổ ị ị ủ ố ớ ể ể ủ ỗ
thước m i c a kh i nh , trong trớ ủ ố ớ ường h p này n i dung hi n th i c a kh i nh đợ ộ ệ ờ ủ ố ớ ược copy t i v trí m i đ đ m b o d li u không b m t. Con tr m i tr t i kh i nhớ ị ớ ể ả ả ữ ệ ị ấ ỏ ớ ỏ ớ ố ớ
được hàm tr v . N u không th thay đ i kích thả ề ế ể ổ ướ ủc c a kh i nh thì hàm s tr vố ớ ẽ ả ề
m t con tr null nh ng tham s ộ ỏ ư ốpointer và n i dung c a nó s không b thay đ i. ộ ủ ẽ ị ổ
Hàm free.
Hàm này gi i phóng m t kh i nh đ ng đã đả ộ ố ớ ộ ượ ấc c p phát b i ở malloc, calloc ho cặ
realloc.
Hàm này ch đỉ ược dùng đ gi i phóng b nh để ả ộ ớ ượ ấc c p phát b i các hàm ở malloc,
calloc and realloc.