Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Realloc ในภาษา C คืออะไร?


ฟังก์ชันการจัดสรรหน่วยความจำ C ไลบรารี่ void *realloc(void *ptr, size_t size) พยายามปรับขนาดบล็อกหน่วยความจำที่ชี้ไปโดย ptr ซึ่งก่อนหน้านี้ได้รับการจัดสรรด้วยการเรียก malloc หรือ calloc

ฟังก์ชันการจัดสรรหน่วยความจำ

หน่วยความจำสามารถจัดสรรได้สองวิธีตามที่อธิบายไว้ด้านล่าง -

Realloc ในภาษา C คืออะไร?

เมื่อจัดสรรหน่วยความจำ ณ เวลาคอมไพล์แล้ว จะไม่สามารถเปลี่ยนแปลงได้ในระหว่างการดำเนินการ จะมีปัญหาเรื่องความไม่เพียงพอหรือการสูญเสียความจำอย่างอื่น

วิธีแก้ไขคือสร้างหน่วยความจำแบบไดนามิก เช่น ตามความต้องการของผู้ใช้ระหว่างการทำงานของโปรแกรม

ฟังก์ชันไลบรารีมาตรฐานที่ใช้สำหรับการจัดการหน่วยความจำแบบไดนามิกมีดังนี้ -

  • malloc ( )
  • calloc ( )
  • realloc ( )
  • ฟรี ( )

ฟังก์ชัน realloc ( )

  • ใช้สำหรับการจัดสรรหน่วยความจำใหม่

  • สามารถลดหรือเพิ่มหน่วยความจำที่จัดสรรได้

  • ส่งคืนตัวชี้เป็นโมฆะที่ชี้ไปยังที่อยู่ฐานของหน่วยความจำที่จัดสรรใหม่

ไวยากรณ์สำหรับฟังก์ชัน realloc() มีดังนี้ -

Free void *realloc (pointer, newsize);

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการใช้งานฟังก์ชัน realloc()

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

ตัวอย่าง

รับด้านล่างเป็นโปรแกรม C โดยใช้ฟังก์ชัน 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;
}

ผลลัพธ์

เมื่อโปรแกรมข้างต้นทำงาน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

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