realloc()函数
原型: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()函数的更多相关文章
- realloc 函数的使用
realloc 函数的使用 #include <stdio.h> #include <stdlib.h> #include <iostream> using nam ...
- c语言中realloc()函数解析
一.基本特性 1. realloc()函数可以重用或扩展以前用malloc().calloc()及realloc()函数自身分配的内存. 2. realloc()函数需两个参数:一个是包含地址的指针( ...
- malloc,calloc,realloc函数用法,原理及不同解析
https://blog.csdn.net/lixungogogo/article/details/50887028 一.malloc malloc在MSDN中原型为: void *malloc( s ...
- malloc()函数,calloc()函数,realloc()函数,free()函数
malloc()函数 头文件:#include <stdlib.h> malloc() 函数用来动态地分配内存空间,其原型为:void* malloc (size_t size); [参数 ...
- malloc、calloc、realloc函数说明
malloc 函数 #include <stdlib.h> void* malloc(int n); n为要分配的字节数,如果成功,返回获得空间的首地址,如果分配失败,则返回NULL,ma ...
- malloc,free,calloc,realloc函数
malloc函数 原型:extern void* malloc(unsigned int size): 功能:动态分配内存: 注意:size仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故 ...
- c语言中的c语言中realloc()函数解析
c语言中realloc()函数解析 真是有点惭愧,这些内容本应该很早就掌握的,以前只是糊里糊涂的用,不知道在内存中具体是怎么回事,现在才弄清楚. realloc(void *__ptr, size_t ...
- realloc函数的用法
realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小. 如果将分配的内存减少,realloc仅仅是改变索引的 ...
- C语言:使用realloc函数对malloc或者calloc动态分配的内存大小进行扩展
#include<stdio.h> #include<stdlib.h> #include<time.h> typedef struct { char name[3 ...
随机推荐
- SQL Server 截取日期部分字符
select GetDate() --用DateName()就可以获得相应的年.月.日 Select Datename(year,GetDate())+'-'+Datename (month,GetD ...
- 编译基于obs-studio的阿里巴巴直播工具tblive的过程和常见问题解决
tblive 简介 tblive开源项目对应的产品是千牛主播,是一个独立的PC端主播工具,基于开源软件OBS Studio来修改定制. 项目说明 tblive是一款优秀的基于obs-studio的直播 ...
- 线程池ThreadPool实战
线程池ThreadPool 线程池概念 常用线程池和方法 1.测试线程类 2.newFixedThreadPool固定线程池 3.newSingleThreadExecutor单线程池 4.newCa ...
- JS去除字符串左右两端的空格(转载)
来源:https://www.cnblogs.com/fanyf/p/3785387.html var str=' 测试 '; 一.函数 <script type="t ...
- Discuz!数据库操作DB类和C::t类介绍
类定义文件 DB类: 文件\source\class\class_core.php class DB extends discuz_database {} discuz_database类定义 文件\ ...
- springboot使用过滤器Filter
先创建过滤器配置类: ## 引入的包部分省略... @Configuration public class FilterConfig { @SuppressWarnings({"rawtyp ...
- 蓝桥杯-入门训练 :Fibonacci数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1.当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. ...
- 克隆Linux系统的网卡设置
虚拟机里创建新主机使用克隆的办法,可以大大节省主机反复安装消耗的时间精力.但克隆出来的主机网卡及配置文件会发生改变,给我们在进行网卡设置时的很多麻烦.题主本文将从Linux里CentOS6发行版克隆的 ...
- [https][tls] 如何使用wireshark查看tls/https加密消息--使用私钥
之前总结了使用keylog进行https流量分析的方法: [https][tls] 如何使用wireshark查看tls/https加密消息--使用keylog 今天总结一下使用服务器端证书私钥进行h ...
- 使用ImageMagick在Linux系统上截图
ImageMagick安装指令: sudo apt-get install imagemagick 安装完成后,输入 import screenshot.png 命令就可以开始截图.此时鼠标图标会变成 ...