Computer >> Máy Tính >  >> Lập trình >> lập trình C

Realloc trong ngôn ngữ C là gì?

Hàm cấp phát bộ nhớ trong thư viện C void * realloc (void * ptr, size_t size) cố gắng thay đổi kích thước khối bộ nhớ được trỏ tới bởi ptr đã được cấp phát trước đó bằng một lệnh gọi tới malloc hoặc calloc.

Chức năng cấp phát bộ nhớ

Bộ nhớ có thể được cấp phát theo hai cách như được giải thích bên dưới -

Realloc trong ngôn ngữ C là gì?

Khi bộ nhớ được cấp phát tại thời điểm biên dịch, nó không thể thay đổi trong quá trình thực thi. Sẽ có vấn đề về sự thiếu hụt hoặc lãng phí bộ nhớ.

Giải pháp là tạo bộ nhớ động, tức là theo yêu cầu của người dùng trong quá trình thực thi chương trình.

Các chức năng thư viện tiêu chuẩn được sử dụng để quản lý bộ nhớ động như sau -

  • malloc ()
  • calloc ()
  • realloc ()
  • miễn phí ()

Hàm realloc ()

  • Nó được sử dụng để phân bổ lại bộ nhớ đã được cấp phát.

  • Nó có thể giảm hoặc tăng bộ nhớ được cấp phát.

  • Nó trả về một con trỏ void trỏ đến địa chỉ cơ sở của bộ nhớ được phân bổ lại.

Cú pháp cho hàm realloc () như sau -

Free void *realloc (pointer, newsize);

Ví dụ

Ví dụ sau cho thấy cách sử dụng hàm realloc ().

int *ptr;
ptr = (int * ) malloc (1000);// we can use calloc also
- - -
- - -
- - -
ptr = (int * ) realloc (ptr, 500);
- - -
- - -
ptr = (int * ) realloc (ptr, 1500);

Ví dụ

Dưới đây là chương trình C sử dụng hàm realloc () -

#include<stdio.h>
#include<stdlib.h>
int main(){
   int *ptr, i, num;
   printf("array size is 5\n");
   ptr = (int*)calloc(5, sizeof(int));
   if(ptr==NULL){
      printf("Memory allocation failed");
      exit(1); // exit the program
   }
   for(i = 0; i < 5; i++){
      printf("enter number at %d: ", i);
      scanf("%d", ptr+i);
   }
   printf("\nLet's increase the array size to 7\n ");
   ptr = (int*)realloc(ptr, 7 * sizeof(int));
   if(ptr==NULL){
      printf("Memory allocation failed");
      exit(1); // exit the program
   }
   printf("\n enter 2 more integers\n\n");
   for(i = 5; i < 7; i++){
      printf("Enter element number at %d: ", i);
      scanf("%d", ptr+i);
   }
   printf("\n result array is: \n\n");
   for(i = 0; i < 7; i++){
      printf("%d ", *(ptr+i) );
   }
   return 0;
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

array size is 5
enter number at 0: 23
enter number at 1: 12
enter number at 2: 45
enter number at 3: 67
enter number at 4: 20
Let's increase the array size to 7
enter 2 more integers
Enter element number at 5: 90
Enter element number at 6: 60
result array is:
23 12 45 67 20 90 60