POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG

Một phần của tài liệu Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 12: Pointer (Trang 58 - 65)

CHUỖI KÝ TỰ Ví dụ:

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG

NHỚ ĐỘNG

 C cho phép khai báo các biến động, các biến này khi cần thì xin chỗ, không cần thì giải

phóng vùng nhớ cho chương trình sử dụng vào mục đích khác. Các biến động này được cấp phát trong vùng nhớ heap, là vùng đáy bộ nhớ (vùng còn lại sau khi đã nạp các chương trình khác xong), và được quản lý bởi các biến

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG NHỚ ĐỘNG

 Trong C có hai hàm chuẩn để xin cấp phát bộ nhớ động malloc() và calloc(), cả hai hàm đều có prototype nằm trong file alloc.h hoặc

stdlib.h như sau:

void *malloc(size_t size);

void *calloc(size_t nitems, size_t size);

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG NHỚ ĐỘNG

 Nếu biến động được xin, sau khi dùng xong, vùng nhớ của nó không được giải phóng thì nó vẫn chiếm chỗ trong bộ nhớ, mặc dù chương trình đã kết thúc. C đưa ra hàm free() để giải phóng khối bộ nhớ được xin bằng hàm

malloc() hoặc calloc().

 Prototype của hàm free() trong file stdlib.h hoặc alloc.h như sau:

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG NHỚ ĐỘNG

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG NHỚ ĐỘNG

Ví dụ: Cần xin một khối bộ nhớ có 10 phần tử

int, ta viết như sau:

int *pint;

pint = (int *) malloc (10 * sizeof (int));

hoặc

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG NHỚ ĐỘNG

#include <stdio.h> #include <conio.h>

#include <process.h>  EXIT

#include <alloc.h> main()

{ int *pint, s = 0, i;

pint = (int *) calloc (10, sizeof (int)); if (pint == NULL)

{ printf ("Khong du bo nho \n");

exit (1); }

POINTER VÀ VIỆC ĐỊNH VỊ BỘ NHỚ ĐỘNG NHỚ ĐỘNG

clrscr();

printf ("Moi nhap 10 tri vao mang: "); for (i = 0; i <10; i++)

scanf ("%d", &pint[i]); for (i = 0; i <10; i++)

s += pint[i];

printf ("Tong cac phan tu cua mang la: %d \n", s); getch();

free (pint);

Một phần của tài liệu Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 12: Pointer (Trang 58 - 65)

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

(83 trang)