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 cấp phát một khối dữ liệu có kiểu khác char (lớn hơn 1 byte) chúng ta
phải nhân số 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ó: