Hàm realloc() trong Thư viện C: Sử dụng như thế nào? Cú pháp & Ví dụ
Realloc() là gì?
realloc () là một chức năng của thư viện C để tăng thêm kích thước bộ nhớ cho các khối bộ nhớ đã được phân bổ. Mục đích của realloc trong C là mở rộng các khối bộ nhớ hiện tại trong khi vẫn giữ nguyên nội dung gốc. Hàm realloc() giúp giảm kích thước bộ nhớ được cấp phát trước đó bởi hàm malloc hoặc calloc. realloc là viết tắt của việc phân bổ lại bộ nhớ.
Cú pháp realloc trong C
ptr = realloc (ptr,newsize);
Câu lệnh trên phân bổ một không gian bộ nhớ mới với kích thước được chỉ định trong biến newsize. Sau khi thực hiện các chức năng, con trỏ sẽ được trả về byte đầu tiên của khối bộ nhớ. Kích thước mới có thể lớn hơn hoặc nhỏ hơn bộ nhớ trước đó. Chúng ta không thể chắc chắn rằng khối mới được cấp phát có trỏ đến cùng vị trí với khối bộ nhớ trước đó hay không. Hàm realloc trong C sẽ sao chép tất cả dữ liệu trước đó vào vùng mới. Nó đảm bảo rằng dữ liệu sẽ được an toàn.
Ví dụ:
#include <stdio.h> int main () { char *ptr; ptr = (char *) malloc(10); strcpy(ptr, "Programming"); printf(" %s, Address = %u\n", ptr, ptr); ptr = (char *) realloc(ptr, 20); //ptr is reallocated with new size strcat(ptr, " In 'C'"); printf(" %s, Address = %u\n", ptr, ptr); free(ptr); return 0; }
Cách sử dụng realloc()
Chương trình dưới đây trong C trình bày cách sử dụng realloc trong C để phân bổ lại bộ nhớ.
#include <stdio.h> #include <stdlib.h> int main() { int i, * ptr, sum = 0; ptr = malloc(100); if (ptr == NULL) { printf("Error! memory not allocated."); exit(0); } ptr = realloc(ptr,500); if(ptr != NULL) printf("Memory created successfully\n"); return 0; }
Kết quả của ví dụ realloc trong C:
Memory created successfully
Bất cứ khi nào realloc dẫn đến một hoạt động không thành công, nó sẽ trả về một con trỏ null, và dữ liệu trước đó cũng được giải phóng.