ฟังก์ชั่น realloc () ในไลบรารี C: วิธีการใช้งาน? ไวยากรณ์และตัวอย่าง
realloc() คืออะไร?
เรียลล็อค() เป็นฟังก์ชันของไลบรารี C สำหรับเพิ่มขนาดหน่วยความจำให้กับบล็อกหน่วยความจำที่จัดสรรไว้แล้ว วัตถุประสงค์ของการจัดสรรใหม่ใน C คือการขยายบล็อกหน่วยความจำปัจจุบันโดยปล่อยให้เนื้อหาต้นฉบับเหมือนเดิม ฟังก์ชัน realloc() ช่วยลดขนาดของหน่วยความจำที่จัดสรรไว้ก่อนหน้านี้โดยฟังก์ชัน malloc หรือ calloc realloc ย่อมาจากการจัดสรรหน่วยความจำใหม่
ไวยากรณ์สำหรับการจัดสรรใหม่ใน C
ptr = realloc (ptr,newsize);
คำสั่งข้างต้นจัดสรรพื้นที่หน่วยความจำใหม่ด้วยขนาดที่ระบุในตัวแปร newsize หลังจากดำเนินการ ฟังก์ชันตัวชี้จะถูกส่งกลับไปยังไบต์แรกของบล็อกหน่วยความจำ ขนาดใหม่อาจใหญ่หรือเล็กกว่าหน่วยความจำก่อนหน้าได้ เราไม่สามารถแน่ใจได้ว่าหากบล็อกที่จัดสรรใหม่จะชี้ไปยังตำแหน่งเดียวกันกับบล็อกหน่วยความจำก่อนหน้า ฟังก์ชัน realloc ใน C จะคัดลอกข้อมูลก่อนหน้าทั้งหมดในภูมิภาคใหม่ ทำให้แน่ใจว่าข้อมูลจะยังคงปลอดภัย
ตัวอย่างเช่น:
#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 สาธิตวิธีการใช้ realloc ใน C เพื่อจัดสรรหน่วยความจำใหม่
#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; }
ผลลัพธ์ของการจัดสรรใหม่ในตัวอย่าง C:
Memory created successfully
เมื่อใดก็ตามที่การจัดสรรใหม่ส่งผลให้การดำเนินการไม่สำเร็จ ระบบจะส่งคืน ตัวชี้ค่าว่างและข้อมูลก่อนหน้าก็ถูกปลดปล่อยเช่นกัน