GIÁO TRÌNH C++ - Trang 54

Bộ nhớ động trong ANSI-C

Toán tử newdelete 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ó:

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.