📜  realloc (1)

📅  最后修改于: 2023-12-03 14:47:02.292000             🧑  作者: Mango

介绍 realloc 函数

简述

realloc 函数是 C 语言中的一个标准库函数,用于修改已分配内存块的大小。

函数原型
void *realloc(void *ptr, size_t size);

其中,ptr 是指向已分配内存的指针,size 是需要重新分配的内存块大小。

功能说明

realloc 函数可以完成以下功能:

  1. 如果 ptrNULL 指针,则相当于调用 malloc(size) 函数,即分配一个新的内存块并返回指向该内存块的指针。
  2. 如果 size 的值为 0,则相当于调用 free(ptr) 函数,即释放 ptr 指向的内存块,并返回一个 NULL 指针。
  3. 如果 size 的值大于原先分配的内存块的大小,则会重新分配一个更大的内存块,然后将原先的数据拷贝到新的内存块中,并返回指向新内存块的指针。
  4. 如果 size 的值小于等于原先分配的内存块的大小,则会保留原先的内存块,返回指向原先内存块的指针。
使用注意事项
  1. 使用 realloc 函数前必须要使用 malloccalloc 函数分配内存。
  2. 如果 realloc 函数返回 NULL 指针,则说明分配内存失败,原先的内存块仍然可用。
  3. 如果重新分配内存失败,会返回原先的内存块并保留原先的数据,因此需要谨慎使用。
示例代码
#include <stdio.h>
#include <stdlib.h>

int main() {
    int* ptr;
    int size1 = 4, size2 = 6;
    ptr = (int*) malloc(size1 * sizeof(int));
    for (int i = 0; i < size1; i++) {
        ptr[i] = i;
    }
    for (int i = 0; i < size1; i++) {
        printf("%d ", ptr[i]);
    }
    printf("\n");
    ptr = (int*) realloc(ptr, size2 * sizeof(int));
    for (int i = size1; i < size2; i++) {
        ptr[i] = i;
    }
    for (int i = 0; i < size2; i++) {
        printf("%d ", ptr[i]);
    }
    printf("\n");
    free(ptr);
    return 0;
}

这段示例代码分配了一个大小为 4 的整型数组,然后重新分配了一个大小为 6 的数组,并将原先数组中的数据拷贝到新的内存块中。