Hàm realloc thay đổi kích thước của vùng nhớ đã được cấp phát

void *realloc(void *memblock, size_t size);

Parameter:

memblock: con trỏ trỏ tới vùng nhớ đã được cấp phát trước đó

size: số byte giành cho vùng nhớ mới

Remark:

Hàm realloc( ) thay đổi kích thước của vùng nhớ đã được cấp phát.  memblock trỏ tới vùng nhớ đã được cấp phát trước đó.

  • Nếu không đủ vùng nhớ để cấp phát mới, vùng nhớ cũ không thay đổi. Hàm trả về NULL
  • Nếu memblock là NULL, hàm realloc( ) tương tự như hàm malloc( ), sẽ cấp phát 1 vùng nhớ mới và trả về con trỏ tới vùng nhớ mới.
  • size: đưa ra kích thước mới cho vùng nhớ. Nếu kích thước nhỏ hơn kích thước vùng nhớ trước đó, dữ liệu trong vùng nhớ đó có thể bị thay đổi.
  • Nếu size = 0, vùng nhớ memblock được giải phóng, giá trị trả về là NULL
  • Vùng nhớ mới được cấp phát có thể ở địa chỉ khác với vùng nhớ đã được cấp phát. Do vậy, con trỏ trả về của hàm có thể không phải là con trỏ truyền vào memblock.

Ví dụ:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>

void main( void )
{
    char* buff, *old_buff;
    int size;

    if((buff = (char*)malloc(100*sizeof(char))) == NULL)
    {
        printf("\nInsufficient memory for malloc()");
        return;
    }
    size = _msize( buff );
    printf("\nSize of original memory: %d", size);

    old_buff = buff;
    if((buff = (char*)realloc(buff, 50 + 100*sizeof(char))) == NULL)
    {
        free(old_buff);
        printf("\nInsufficient memory for realloc()");
    }

    size = _msize( buff );
    printf("\nSize of newly reallocated memory: %d", size);

    getch();
}

Kết quả:

Hàm realloc thay đổi vùng nhớ đã cấp phát
Hàm realloc thay đổi vùng nhớ đã cấp phát

Be the first to comment

Leave a Reply