C ++ realloc () - Thư viện chuẩn C ++

Hàm realloc () trong C ++ phân bổ lại khối bộ nhớ đã được cấp phát trước đó nhưng chưa được giải phóng.

Hàm realloc () phân bổ lại bộ nhớ đã được cấp phát trước đó bằng cách sử dụng hàm malloc (), calloc () hoặc realloc () và chưa được giải phóng bằng cách sử dụng hàm free ().

Nếu kích thước mới bằng 0, giá trị trả về phụ thuộc vào việc triển khai thư viện. Nó có thể có hoặc không trả về một con trỏ null.

nguyên mẫu realloc ()

 void * realloc (void * ptr, size_t new_size);

Hàm được định nghĩa trong tệp tiêu đề.

tham số realloc ()

  • ptr: Một con trỏ tới khối bộ nhớ được phân bổ lại.
  • new_size: Một giá trị tích phân không dấu đại diện cho kích thước mới của khối bộ nhớ tính bằng byte.

realloc () Giá trị trả về

Hàm realloc () trả về:

  • Một con trỏ đến đầu của khối bộ nhớ được phân bổ lại.
  • Con trỏ rỗng nếu phân bổ không thành công.

Trong khi phân bổ lại bộ nhớ, nếu không có đủ bộ nhớ, thì khối bộ nhớ cũ không được giải phóng và con trỏ null được trả về.

Nếu con trỏ cũ (tức là ptr) là null, việc gọi realloc () giống như cách gọi hàm malloc () với kích thước mới là tham số của nó.

Có hai cách khả thi để phân bổ lại bộ nhớ.

  1. Mở rộng hoặc thu nhỏ cùng một khối : Khối bộ nhớ được trỏ bởi con trỏ cũ (tức là ptr) được mở rộng hoặc thu nhỏ, nếu có thể. Nội dung của khối bộ nhớ vẫn không thay đổi tùy theo kích thước cũ và mới. Nếu khu vực được mở rộng, nội dung của khối mới được phân bổ là không xác định.
  2. Di chuyển đến vị trí mới : Một khối bộ nhớ mới có kích thước new_size byte được cấp phát. Trong trường hợp này, nội dung của khối bộ nhớ vẫn không thay đổi tùy theo kích thước mới và cũ nhỏ hơn và nếu bộ nhớ được mở rộng, nội dung của khối mới được cấp phát là không xác định.

Ví dụ 1: Hàm realloc () hoạt động như thế nào?

 #include #include using namespace std; int main() ( float *ptr, *new_ptr; ptr = (float*) malloc(5*sizeof(float)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i*1.5; ) /* reallocating memory */ new_ptr = (float*) realloc(ptr, 10*sizeof(float)); if(new_ptr==NULL) ( cout << "Memory Re-allocation Failed"; exit(1); ) /* Initializing re-allocated memory block */ for (int i=5; i<10; i++) ( new_ptr(i) = i*2.5; ) cout << "Printing Values" << endl; for (int i=0; i<10; i++) ( cout << new_ptr(i) << endl; ) free(new_ptr); return 0; )

Khi bạn chạy chương trình, đầu ra sẽ là:

 Giá trị in 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Ví dụ 2: Hàm realloc () với new_size 0

 #include #include using namespace std; int main() ( int *ptr, *new_ptr; ptr = (int*) malloc(5*sizeof(int)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i; ) /* re-allocating memory with size 0 */ new_ptr = (int*) realloc(ptr, 0); if(new_ptr==NULL) ( cout << "Null Pointer"; ) else ( cout << "Not a Null Pointer"; ) return 0; )

Khi bạn chạy chương trình, đầu ra sẽ là:

 Null Pointer

Ví dụ 3: Hàm realloc () khi ptr là NULL

 #include #include #include using namespace std; int main() ( char *ptr=NULL, *new_ptr; /* reallocating memory, behaves same as malloc(20*sizeof(char)) */ new_ptr = (char*) realloc(ptr, 50*sizeof(char)); strcpy(new_ptr, "Welcome to Programiz.com"); cout << new_ptr; free(new_ptr); return 0; )

Khi bạn chạy chương trình, đầu ra sẽ là:

 Chào mừng đến với Programiz.com

thú vị bài viết...