详解realloc函数的功能——C语言代码展示

本文通过一个C语言代码示例详细讲解了realloc函数的使用,展示了如何动态扩展内存空间。程序首先使用malloc分配NUM1个int型空间,然后使用realloc将空间扩展到NUM2个int型,过程中包括内存分配、赋值、打印内存地址和值等步骤,旨在说明当初始内存不足时,realloc如何有效扩充内存以满足需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、程序C语言代码展示如下:

/************************************************
运行平台:vc++6.0
实现功能:体现realloc函数的作用
************************************************/
#include<stdio.h>
#include<stdlib.h>

#define NUM1 5
#define NUM2 10

int main(void)
{   
    int i = 0;   
    int *point = (int *)malloc(NUM1*sizeof(int)); 
   
    printf("malloc指针point的值为:%p\n", point);
   
    printf("为point[%d]~point[%d]赋值:\n", 0, NUM1-1);   
    for(i=0; i<NUM1; i++) 
    {
        scanf("%d", &point[i]);
    }
    printf("point[%d]~point[%d]的值为:\n", 0, NUM1-1);
    for(i=0; i<NUM1; i++)       
    {
        printf("%2d", point[i]);
    }
    printf("\n\n");

    point=(int *)realloc(point, NUM2*sizeof(int)); 
    printf("realloc指针point的值为:%p\n", point);
  
    printf("为point[%d]~point[%d]赋值:\n", NUM1, NUM2-1);
    for(i=NUM1; i<NUM2; i++) 
    {
        scanf("%d", &point[i]);
    }

    printf("point[%d]~point[%d]的值为:\n", 0, NUM2-1);
    for(i=0; i<NUM2; i++)       
    {
        printf("%2d", point[i]);
    }        
    printf("\n");   

    free(point);
   
    return 0;
}

 

二、程序运行结果如下:

 

三、程序设计过程解析如下:

1.先使用malloc分配NUM1个int型大小的空间,地址返回给指针point

2.将其地址打印出来为:003206D0

3.从分配内存空间的0到(NUM1-1)给每个int型空间赋值为:0 1 2 3 4

4.从空间0开始,打印出来为:0 1 2 3 4

5.再使用realloc从point地址分配NUM2个int型大小空间,地址返回给指针point

6.将其地址打印出来同样为:003206D0

7.从NUM1到(NUM2 - 1)给每个int型空间赋值为:5 6 7 8 9

8.从0空间开始,打印出来为:0 1 2 3 4 5 6 7 8 9

 

四、程序设计目的说明如下:

        当使用动态分配的内存空间不够用时,可以再使用realloc扩充空间,以满足需求!

如此,解决了使用自动(临时)数组会导致当初始分配空间不够用时无法扩充的缺陷。

 

五、realloc总结如下:

        最后觉得百度百科关于realloc的使用总结讲述不错,故摘抄如下:

链接:http://baike.baidu.com/link?url=haVQHE5N1GjdTR92Vh8V4SDO1KClfpbMIpT_N7rZr9gJ9e4P9RGX_10QB5KfIvwu

realloc使用总结:

1. realloc失败的时候,返回NULL。
2. realloc失败的时候,原来的内存不改变,不会释放也不会移动。
3. 假如原来的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址; 假如原来的内存后面没有足够多剩余内存的话,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被自动 free 掉,realloc返回新内存的地址。
4. 如果size为0,效果等同于 free ()。这里需要注意的是只对 指针 本身进行释放,例如对二维指针**a,对a调用realloc时只会释放一维,使用时谨防 内存泄露
5. 传递给realloc的 指针 必须是先前通过 malloc (), calloc (), 或realloc()分配的。
6.传递给realloc的 指针 可以为空,等同于 malloc

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值