Computer >> Hướng Dẫn 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ớ thư viện C void *realloc(void *ptr, size_t size) cố gắng thay đổi kích thước khối bộ nhớ trỏ bởi ptr đã được cấp phát trước đó bằng malloc hoặc calloc.

Các hàm cấp phát bộ nhớ

Bộ nhớ có thể cấp phát 2 cách:

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

Một khi cấp phát tại compile time, không thể thay đổi khi chạy. Sẽ có vấn đề thiếu hoặc lãng phí bộ nhớ.

Giải pháp: cấp phát động theo yêu cầu khi chạy chương trình.

Các hàm thư viện chuẩn cho quản lý bộ nhớ động:

  • malloc()
  • calloc()
  • realloc()
  • free()

Hàm realloc()

  • Dùng để cấp phát lại bộ nhớ đã cấp phát.
  • Có thể giảm hoặc tăng bộ nhớ đã cấp phát.
  • Trả về con trỏ void trỏ tới địa chỉ cơ sở bộ nhớ đã cấp phát lại.

Cú pháp:

void *realloc(pointer, newsize);

Ví dụ

int *ptr; 
ptr = (int*) malloc(1000); 
ptr = (int*) realloc(ptr, 500); 
ptr = (int*) realloc(ptr, 1500);

Chương trình ví dụ

Chương trình C dùng realloc():

#include <stdio.h> 
#include <stdlib.h> 
int main() { 
    int *ptr, i, num; 
    printf("Kích thước mảng là 5\n"); 
    ptr = (int*) calloc(5, sizeof(int)); 
    if (ptr == NULL) { 
        printf("Cấp phát bộ nhớ thất bại"); 
        exit(1); 
    } 
    for (i = 0; i < 5; i++) { 
        printf("Nhập số tại %d: ", i); 
        scanf("%d", ptr + i); 
    } 
    printf("\nTăng kích thước mảng lên 7\n"); 
    ptr = (int*) realloc(ptr, 7 * sizeof(int)); 
    if (ptr == NULL) { 
        printf("Cấp phát bộ nhớ thất bại"); 
        exit(1); 
    } 
    printf("\nNhập 2 số nguyên thêm\n\n"); 
    for (i = 5; i < 7; i++) { 
        printf("Nhập phần tử tại %d: ", i); 
        scanf("%d", ptr + i); 
    } 
    printf("\nMảng kết quả:\n\n"); 
    for (i = 0; i < 7; i++) { 
        printf("%d ", *(ptr + i)); 
    } 
    return 0; 
}

Kết quả

Kích thước mảng là 5 
Nhập số tại 0: 23 
Nhập số tại 1: 12 
Nhập số tại 2: 45 
Nhập số tại 3: 67 
Nhập số tại 4: 20 
Tăng kích thước mảng lên 7 
Nhập 2 số nguyên thêm 
Nhập phần tử tại 5: 90 
Nhập phần tử tại 6: 60 
Mảng kết quả: 23 12 45 67 20 90 60