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ả:
Leave a Reply
You must be logged in to post a comment.