捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >函数快查 > 正文
6 2018.02

realloc -- 重新分配内存空间

点击次数:1419 更新时间:2018-2-6 20:25:24  【打印此页

realloc 函数文档



函数概要:

1. realloc 函数修改 ptr 指向的内存空间大小为 size 字节。

2. 如果新分配的内存空间比原来的大,则旧内存块的数据不会发生改变;如果新的内存空间大小小于旧的内存空间,可能会导致数据丢失,慎用!

3. 该函数将移动内存空间的数据并返回新的指针。

4. 如果 ptr 参数为 NULL,那么调用该函数就相当于调用 malloc(size)。

5. 如果 size 参数为 0,并且 ptr 参数不为 NULL,那么调用该函数就相当于调用 free(ptr)。

6. 除非 ptr 参数为 NULL,否则 ptr 的值必须由先前调用 malloccalloc 或 realloc 函数返回。


函数原型:

#include  <stdlib.h>
...
void *realloc(void *ptr, size_t size);



参数解析:
 

参数

含义

ptr

1. 指向由先前调用 malloccalloc 或 realloc 函数返回的内存空间 
2. 如果该参数为 NULL,相当于调用 malloc(size) 函数

size

指定新的内存块空间大小,以字节为单位



返回值:

1. 如果函数调用成功,返回值是指向新的内存空间的指针,由于返回类型是 void 指针(void *),所以它可以被转换成任何类型的数据。

2. 如果函数调用失败,返回值是 NULL。

3. 如果 size 参数设置为 0,返回值也可能是 NULL,也可能返回一个指针值,稍后可以传递给 free 函数。

4. 如果 realloc 函数调用失败,那么原始内存空间的数据并不会修改,也不会被释放或移动。


演示:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        int i, num;
        int count = 0;
        int *ptr = NULL; // 注意,这里必须初始化为NULL

        do
        {
                printf("请输入一个整数(输入-1表示结束):");
                scanf("%d", &num);
                count++;

                ptr = (int *)realloc(ptr, count * sizeof(int));
                if (ptr == NULL)
                {
                       printf("内存空间不足!\n");
                       exit(1);
                }

                ptr[count-1] = num;
        } while(num != -1);

        printf("输入的整数分别是:");
        for (i = 0; i < count; i++)
        {
                printf("%d ", ptr[i]);
        }
        printf("\n");

        free(ptr);

        return 0;
}


 

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:1419 更新时间:2018-2-6 20:25:24  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修