Menu
CoddyTech

Bộ nhớ động với new

Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 6 trên 56.

Đến nay, bạn đã làm việc với các con trỏ trỏ đến những biến đã được tạo trong chương trình. Nhưng nếu bạn cần tạo biến trong khi chương trình đang chạy thì sao? Đây là lúc cấp phát bộ nhớ động bằng từ khóa new trở nên cần thiết.

Từ khóa new cho phép bạn cấp phát bộ nhớ cho một biến trên heap trong khi chương trình chạy. Khác với các biến thông thường được tạo trên stack, bộ nhớ được cấp phát động sẽ tồn tại cho đến khi bạn giải phóng nó một cách tường minh.

int* ptr = new int;  // Cấp phát bộ nhớ cho một số nguyên (integer)
*ptr = 42;           // Gán một giá trị (value) vào vùng nhớ đã cấp phát

Trong ví dụ này, new int cấp phát đủ bộ nhớ để lưu một số nguyên và trả về con trỏ đến vị trí bộ nhớ đó. Sau đó, bạn có thể dùng toán tử giải tham chiếu để gán giá trị và truy cập biến được cấp phát động giống như mọi con trỏ khác.

Cấp phát bộ nhớ động đặc biệt hữu ích khi bạn chưa biết cần bao nhiêu bộ nhớ cho đến khi chạy chương trình, hoặc khi cần biến tồn tại ngoài phạm vi tạo ra chúng. Tính linh hoạt này khiến new trở thành công cụ mạnh mẽ để xây dựng các chương trình phức tạp hơn.

challenge icon

Thử thách

Dễ

Tạo một chương trình minh họa cách cấp phát bộ nhớ động (dynamic memory allocation) bằng từ khóa new để cấp phát bộ nhớ cho một biến trong khi chương trình chạy.

Chương trình sẽ nhận đầu vào sau:

  • Một giá trị số nguyên để lưu vào vùng bộ nhớ được cấp phát động

Chương trình của bạn cần:

  1. Dùng từ khóa new để cấp phát động bộ nhớ cho một số nguyên
  2. Lưu con trỏ mà new trả về vào một biến con trỏ có tên numPtr
  3. Dùng toán tử giải tham chiếu để gán giá trị đầu vào vào vùng bộ nhớ được cấp phát động
  4. In giá trị được lưu trong vùng bộ nhớ được cấp phát động bằng cách giải tham chiếu con trỏ
  5. In địa chỉ bộ nhớ được lưu trong con trỏ

Dùng định dạng đầu ra chính xác sau:

Value: [value]
Address: [memory address]

Địa chỉ bộ nhớ sẽ hiển thị ở định dạng thập lục phân. Đây là cách C++ hiển thị địa chỉ bộ nhớ của vùng bộ nhớ được cấp phát động.

Tự làm thử

#include <iostream>
using namespace std;

int main() {
    // Đọc đầu vào
    int value;
    cin >> value;
    
    // TODO: Viết code của bạn bên dưới
    // Dùng 'new' để cấp phát bộ nhớ động cho một số nguyên
    // Lưu con trỏ vào biến có tên 'numPtr'
    // Gán giá trị đầu vào vào vùng nhớ vừa cấp phát động
    
    // In ra kết quả
    cout << "Value: " << /* Truy cập giá trị mà numPtr trỏ tới tại đây */ << endl;
    cout << "Address: " << /* In ra địa chỉ lưu trong numPtr */ << endl;
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch C++ online