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

来源:互联网 发布:汽车保养提醒软件 编辑:程序博客网 时间:2024/05/21 18:41

一、程序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

 

0 0
原创粉丝点击