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);