Char *s = (char*) calloc(100, sizeof(char ));

Một phần của tài liệu Bài giảng kỹ thuật lập trình chương 1 Pointer (Trang 49 - 53)

Cấp phát bộ nhớ động

▪ Giải phóng vùng nhớ: dùng hàm free() trong C.

▪ Khi thoát khỏi hàm, các biến khai báo trong hàm sẽ “biến mất”. Tuy nhiên các vùng nhớ được cấp phát động vẫn còn tồn tại và được “đánh dấu” là đang “được dùng”

→ bộ nhớ của máy tính sẽ hết.

Cấp phát bộ nhớ động

▪ Ví dụ: dùng malloc() or calloc() và free() nhập vào một mảng n số nguyên , in ra tổng các phần tử trong mảng

#include <iostream>

// thu vien dung cap phat dong #include <stdlib.h>

using namespace std; int main()

{

int n, i, *ptr, sum = 0;

cout<<"Nhap so luong phan tu:" ; cin >> n;

ptr = (int *)malloc(n * sizeof(int)); // cap phat dong

// ptr = (int *)calloc(n, sizeof(int)); // dung calloc

// check if cap phat ko thanh cong if (ptr == NULL)

{

printf("Co loi! khong the cap phat bo nho."); return 0;

}// …. // ….

// …

cout << "Nhap cac gia tri: "; for (i = 0; i < n; ++i)

{

cin >> *(ptr + i); // hoac dung cin >> ptr[i]; sum += *(ptr + i); // hoac dung sum += ptr[i];

}

cout<<"Tong = " << sum ;

// thu hoi vung nho

free(ptr);

return 0; }

Cấp phát bộ nhớ động

▪ Mở rộng vùng nhớ dùng realloc()

▪ Nếu việc cấp phát bộ nhớ động không đủ hoặc cần nhiều hơn mức đã cấp phát, bạn có thể thay đổi kích thước của bộ nhớ đã được cấp phát trước đó bằng cách sử dụng hàm.

▪ Cú pháp :

void *realloc(void *block, size_t size);

#include <iostream> #include <stdlib.h> using namespace std; int main() { int *ptr, i , n1, n2; cin >> n1; // nhap n1

ptr = (int*) malloc(n1 * sizeof(int));

cout << "Dia chi cua vung nho vua cap phat:" << ptr; cout << "\nNhap lai so luong phan tu: " ;

cin >> n2;

// cap nhat lai vung nho

ptr = (int*) realloc(ptr, n2 * sizeof(int));

cout << "Dia chi cua vung nho vua cap phat:" << ptr; // thu hoi vung nho

free(ptr); return 0; }

Cấp phát lại vùng nhớ có kích thước size do block trỏ đến trong vùng nhớ HEAP.

block == NULL ➔ sử dụng malloc size == 0 ➔ sử dụng free

Cấp phát bộ nhớ động

▪ Cấp phát động trong C++

Một phần của tài liệu Bài giảng kỹ thuật lập trình chương 1 Pointer (Trang 49 - 53)

Tải bản đầy đủ (PDF)

(101 trang)