phân vùng Heap của bộ nhớ ảo) (trả về NULL nếu không đủ bộ nhớ).
Cú pháp : một vùng nhớ
<data_type> *tencontro = new <data_type> ; dãy vùng nhớ liên tục nhau (mảng một chiều)
<data_type> *tencontro = new <data_type> [num_of _elements];
Ví dụ:
int *ptr = new int; // dynamically allocate an integer
double *p_double = new double;
int *p_arr = new int[10]; // cho mảng 10 phần tử
char *c_str = new char [100]; // cho mảng 100 phần tử
❖ Điều khiến cho kỹ thuật Dynamic memory allocation khác với Static memory allocation là số lượng phần tử có thể được cung cấp trong khi chương trình đang chạy. Ví dụ:
int num_of_elements;
cout << "Enter number of elements you want to create: "; cin >> num_of_elements;
Cấp phát bộ nhớ động
▪ Cấp phát động trong C++
o Giải phóng bộ nhớ dùng toán tử delete
• Khi không muốn sử dụng tiếp vùng nhớ đã được cấp phát cho chương trình trên Heap, chúng ta nên trả lại vùng nhớ đó cho hệ điều hành.
• Thật ra khi chương trình kết thúc, tất cả vùng nhớ của chương trình đều bị hệ điều hành thu hồi, nhưng chúng ta nên giải phóng vùng nhớ không cần thiết càng sớm càng tốt.
• Để xóa một vùng nhớ, chúng ta cần có một địa chỉ cụ thể, địa chỉ đó được giữ bởi con trỏ sau khi gán địa chỉ cấp phát cho nó:
• Đối với dãy vùng nhớ liên tục được cấp phát trên Heap, chúng ta cần thêm vào toán tử [ ] để báo với hệ điều hành rằng vùng nhớ đã được cấp phát không dùng cho một biến đơn.
int *p = new int;
delete p;
int *p_arr = new int[10];
Cấp phát bộ nhớ động
▪ Lưu ý:
Cấpphátbộ nhớ tĩnh Cấp phátbộ nhớ động
int Arr [100]; // khai báo mảng Arr
Nhập vào n và các phân tử của mảng
-Không thề nhập n > 100
-Nếu n < 100 - > dư thừa tài nguyên
int Arr[n]; // Wrong
Nhập vào n và các phân tử của mảng
int *Arr = new int[n];