首页 > 编程笔记 > C语言笔记 阅读:19

C语言realloc函数的用法(附带实例)

realloc() 是 C 语言标准库中的函数,位于<stdlib.h>头文件中,它的的原型如下:
void *realloc(void *ptr,size_t size);
该函数的功能是改变 ptr 指针指向的空间大小为 size。设定的 size 大小可以是任意的,也就是说既可以比原来的数值大,也可以比原来的数值小。

realloc() 的返回值是一个指向新地址的指针,如果出现错误,则返回NULL。

例如,改变一个分配的浮点型空间大小成为整型空间大小,代码如下:
fDouble=(double*)malloc(sizeof(double));
iInt=realloc(fDouble,sizeof(int));
其中,fDouble 指向分配的浮点型空间,之后使用 realloc() 函数改变 fDouble 指向的空间的大小,将其大小设置为整型大小,然后将改变后的内存空间的地址返回并赋给 iInt 整型指针。

【实例】定义一个整型指针和浮点型指针,利用 realloc() 函数重新分配内存空间。
#include<stdio.h>
#include <stdlib.h>
int main()
{
   int *fDouble;                           /*定义整型指针*/
   char* iInt;                             /*定义浮点型指针*/
   fDouble = (int*)malloc(sizeof(int));    /*使用malloc()分配整型空间*/
   printf("%d\n", sizeof(*fDouble));        /*输出空间的大小*/
   iInt = realloc(fDouble, sizeof(char));   /*使用realloc()改变分配空间大小*/
   printf("%d\n", sizeof(*iInt));           /*输出空间的大小*/
   return 0;                                /*程序结束*/
}
运行程序,结果为:

4
1

本实例中,首先使用 malloc() 函数分配整型内存空间,然后通过 sizeof() 函数输出内存空间的大小,最后使用 realloc() 函数得到新的内存空间大小。输出新的内存空间的大小,比较两者的数值可以看出,新的内存空间与原来的内存空间大小不一样。

在 C 语言中使用 realloc() 函数时,需要注意以下几点:
例如:
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = NULL;
    int size = 5;

    // 初始分配内存
    ptr = (int *)malloc(size * sizeof(int));
    if (ptr == NULL) {
        printf("内存分配失败!\n");
        return 1;
    }
    printf("初始分配内存: %p\n", (void *)ptr);

    // 使用内存
    for (int i = 0; i < size; i++) {
        ptr[i] = i + 1;
    }

    // 扩大内存
    size *= 2;
    int *temp = (int *)realloc(ptr, size * sizeof(int)); // 使用临时指针
    if (temp == NULL) {
        printf("内存重新分配失败!\n");
        free(ptr); // 释放原来的内存
        ptr = NULL;
        return 1;
    }
    ptr = temp; // 重新分配成功,更新指针
    printf("重新分配内存: %p\n", (void *)ptr);

    // 继续使用新分配的内存
    for (int i = 5; i < size; i++) {
        ptr[i] = i + 1;
    }

    // 打印内容
    for (int i = 0; i < size; i++) {
        printf("%d ", ptr[i]);
    }
    printf("\n");

    // 手动释放内存
    free(ptr);
    ptr = NULL;

    return 0;
}
运行结果为:

初始分配内存: 00000000007013E0
重新分配内存: 00000000007013E0
1 2 3 4 5 6 7 8 9 10

相关文章