Lập trình C - Bộ nhớ động trong C
Cấp phát động trong C
Ngôn ngữ C cung cấp cho chúng ta 4 hàm dùng để cấp phát và giải phóng bộ nhớ động, nhằm giải quyết các vấn đề liên quan đến bộ nhớ.Các hàm này đều nằm trong thư viện stdlib.h
- malloc()
- calloc()
- realloc()
- free()
Trước khi tìm hiểu các hàm trên chúng ta phân biệt giữa bộ nhớ động với bộ nhớ động
Bộ nhớ tĩnh | Bộ nhớ động |
---|---|
Bộ nhớ được cấp phát tại thời điểm dịch chương trình. | Bộ nhớ được cấp phát tại thời điểm chạy chương trình. |
Bộ nhớ không thể tăng khi chương trình đang chạy. | Bộ nhớ có thể tăng khi chương trình đang chạy. |
Thường sử dụng mảng. | Được sử dụng trong danh sách liên kết. |
1. Trước hết là hàm malloc():
Hàm này dùng để cấp phát bộ nhớ động cho một mảng với size_t num là số phần tử của mảng.
Hàm này không khởi tạo bộ nhớ tại thời điểm chạy chương trình
Trả về giá trị NULL nếu bộ nhớ không đủ
Cú pháp:
ptr=(cast-type*)malloc(byte-size)
Ví dụ về hàm malloc()
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,i,*ptr,sum=0;
printf("Enter number of elements: ");
scanf("%d",&n);
ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc
if(ptr==NULL)
{
printf("Sorry! unable to allocate memory");
exit(0);
}
printf("Enter elements of array: ");
for(i=0;i<n;++i)
{
scanf("%d",ptr+i);
sum+=*(ptr+i);
}
printf("Sum=%d",sum);
free(ptr);
return 0;
}
Kết quả:
Enter elements of array: 3
Enter elements of array: 10
10
10
Sum=30
2. Hàm calloc() trong C
Hàm này cấp phát nhiều khối khi bộ nhớ yêu cầu
Khởi tạo các giá trị ban đầu là 0.
Trả về giá trị NULL nếu bộ nhớ không đủ.
Cú pháp:
ptr=(cast-type*)calloc(number, byte-size)
Ví dụ về hàm calloc()
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,i,*ptr,sum=0;
printf("Enter number of elements: ");
scanf("%d",&n);
ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc
if(ptr==NULL)
{
printf("Sorry! unable to allocate memory");
exit(0);
}
printf("Enter elements of array: ");
for(i=0;i<n;++i)
{
scanf("%d",ptr+i);
sum+=*(ptr+i);
}
printf("Sum=%d",sum);
free(ptr);
return 0;
}
Kết quả:
Enter elements of array: 3
Enter elements of array: 10
10
10
Sum=30
3. Hàm realloc() trong C
Nếu 2 hàm malloc() và calloc() không đủ bộ nhớ, chúng ta có thể cấp thêm bộ nhớ bằng hàm realloc(), nó sẽ thay đổi kích thước bộ nhớ.
Cú pháp:
ptr=realloc(ptr, new-size)
4. Hàm free() trong C
Dùng để giải phóng vùng nhớ đã cấp phát.
Cú pháp :
free(ptr)