原型:extern void *realloc(void *mem_address, unsigned int newsize);
参数: mem_address: 要改变内存大小的指针名
newsize : 新的内存大小。

如果分配内存减少,realloc仅仅改变索引的信息。

如果将分配的内存扩大,则有一下几种情况:

1) 如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回元指针。

2) 如果当前内存段后面的空闲字节不够,那么就实验堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并把原来的数据块释放掉,返回新的内存块位置。

3) 如果申请失败,将返回NULL,此时,原来的指针仍有效。

注意:如果调用成功,不管当前内存段后面的空闲空间是否满足要求,都会释放掉原来的指针,重新返回一个指针,虽然返回的指针有可能和原来的指针一样,即不能再次释放掉原来的指针

/***
realloc.c
***/
#include<stdio.h>
#include<stdlib.h> int main(int argc,char ** argv)
{
int input;
int n;
int *numbers1;
int *numbers2;
numbers1 = NULL; if( (numbers2 = (int*)malloc(*sizeof(int))) == NULL)
{
printf("malloc memory unsuccessful");
exit();
} printf("numbers addr:%8X\n",(int)numbers2); for(n = ; n < ; n++)
{
*(numbers2+n) = n;
printf("numbers2's data %d\n",*(numbers2+n));
} printf("Enter new size: ");
scanf("%d",&input); numbers1 = (int *)realloc(numbers2,(input+)*sizeof(int)); if(NULL == numbers1)
{
printf("Error (re)allocating memory");
exit();
} printf("numbers1 addr: %8X\n",(int)numbers1); for(n = ; n < input; n++)
{
*(numbers1++n) = n + ;
} printf("\n"); free(numbers1);
numbers1 = NULL; return ;
}

如果当前内存段有足够的空间,realloc()返回原来的指针:

ubuntu14-@ubuntu:~/ShareWin/shiyanlou/C/file$ ./realloc
numbers addr: D07010
numbers2's data 0
numbers2's data
numbers2's data 2
numbers2's data
numbers2's data 4
Enter new size: 10
numbers1 addr: D07010

当前内存段没有足够的空间,realloc()返回一个新的内存段的指针:

ubuntu14-@ubuntu:~/ShareWin/shiyanlou/C/file$ ./realloc
numbers addr: 25E8010
numbers2's data 0
numbers2's data
numbers2's data 2
numbers2's data
numbers2's data 4
Enter new size: 10000
numbers1 addr: 25E8010

realloc()函数的更多相关文章

  1. realloc 函数的使用

    realloc 函数的使用 #include <stdio.h> #include <stdlib.h> #include <iostream> using nam ...

  2. c语言中realloc()函数解析

    一.基本特性 1. realloc()函数可以重用或扩展以前用malloc().calloc()及realloc()函数自身分配的内存. 2. realloc()函数需两个参数:一个是包含地址的指针( ...

  3. malloc,calloc,realloc函数用法,原理及不同解析

    https://blog.csdn.net/lixungogogo/article/details/50887028 一.malloc malloc在MSDN中原型为: void *malloc( s ...

  4. malloc()函数,calloc()函数,realloc()函数,free()函数

    malloc()函数 头文件:#include <stdlib.h> malloc() 函数用来动态地分配内存空间,其原型为:void* malloc (size_t size); [参数 ...

  5. malloc、calloc、realloc函数说明

    malloc 函数 #include <stdlib.h> void* malloc(int n); n为要分配的字节数,如果成功,返回获得空间的首地址,如果分配失败,则返回NULL,ma ...

  6. malloc,free,calloc,realloc函数

    malloc函数 原型:extern void* malloc(unsigned int size): 功能:动态分配内存: 注意:size仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故 ...

  7. c语言中的c语言中realloc()函数解析

    c语言中realloc()函数解析 真是有点惭愧,这些内容本应该很早就掌握的,以前只是糊里糊涂的用,不知道在内存中具体是怎么回事,现在才弄清楚. realloc(void *__ptr, size_t ...

  8. realloc函数的用法

    realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小. 如果将分配的内存减少,realloc仅仅是改变索引的 ...

  9. C语言:使用realloc函数对malloc或者calloc动态分配的内存大小进行扩展

    #include<stdio.h> #include<stdlib.h> #include<time.h> typedef struct { char name[3 ...

随机推荐

  1. SQL Server 截取日期部分字符

    select GetDate() --用DateName()就可以获得相应的年.月.日 Select Datename(year,GetDate())+'-'+Datename (month,GetD ...

  2. 编译基于obs-studio的阿里巴巴直播工具tblive的过程和常见问题解决

    tblive 简介 tblive开源项目对应的产品是千牛主播,是一个独立的PC端主播工具,基于开源软件OBS Studio来修改定制. 项目说明 tblive是一款优秀的基于obs-studio的直播 ...

  3. 线程池ThreadPool实战

    线程池ThreadPool 线程池概念 常用线程池和方法 1.测试线程类 2.newFixedThreadPool固定线程池 3.newSingleThreadExecutor单线程池 4.newCa ...

  4. JS去除字符串左右两端的空格(转载)

    来源:https://www.cnblogs.com/fanyf/p/3785387.html var str='     测试     '; 一.函数 <script type="t ...

  5. Discuz!数据库操作DB类和C::t类介绍

    类定义文件 DB类: 文件\source\class\class_core.php class DB extends discuz_database {} discuz_database类定义 文件\ ...

  6. springboot使用过滤器Filter

    先创建过滤器配置类: ## 引入的包部分省略... @Configuration public class FilterConfig { @SuppressWarnings({"rawtyp ...

  7. 蓝桥杯-入门训练 :Fibonacci数列

    问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1.当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. ...

  8. 克隆Linux系统的网卡设置

    虚拟机里创建新主机使用克隆的办法,可以大大节省主机反复安装消耗的时间精力.但克隆出来的主机网卡及配置文件会发生改变,给我们在进行网卡设置时的很多麻烦.题主本文将从Linux里CentOS6发行版克隆的 ...

  9. [https][tls] 如何使用wireshark查看tls/https加密消息--使用私钥

    之前总结了使用keylog进行https流量分析的方法: [https][tls] 如何使用wireshark查看tls/https加密消息--使用keylog 今天总结一下使用服务器端证书私钥进行h ...

  10. 使用ImageMagick在Linux系统上截图

    ImageMagick安装指令: sudo apt-get install imagemagick 安装完成后,输入 import screenshot.png 命令就可以开始截图.此时鼠标图标会变成 ...