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 ...
随机推荐
- JavaTCP粘包、拆包
import java.nio.ByteBuffer; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBu ...
- K8S conul部署
官网有Helm方式的安装文档(https://www.consul.io/docs/platform/k8s/index.html) 一,准备工作: 1,k8s环境 2,nfs服务器 二,创建PV n ...
- 14 Scroll 滚动搜索
Scroll的用法: 第一次搜的时候,要指定 快照保留时间1min,分页的大小:2条/页: 对于第一次搜索,ES会返回一个这个scroll的id: 下次再搜的时候,就带着这个scrollid去搜就 ...
- 并发编程之Callable异步,Future模式
Callable 在Java中,创建线程一般有两种方式,一种是继承Thread类,一种是实现Runnable接口.然而,这两种方式的缺点是在线程任务执行结束后,无法获取执行结果.我们一般只能采用共享变 ...
- 能够提高PHP的性能的一些注意事项
1. 如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍.(静态类调用属性和方法,只可以调用静态属性和方法.self::方法名().self::属性名.只有实例化 ...
- 页面 ajax
function ajax({ url, success, data = { }, type= "GET", async = true}){ let xhr; if(XMLHttp ...
- PHP 常用数据库操作
1.建立与数据库服务器的连接(前提数据库服务器必须打开) 第一个参数:本地地址 第二个参数:数据库账户 第三个参数:数据库密码 第四个参数:数据库名称 $connection = mysqli_con ...
- shell 字符串截取表达式
${var#str} 从左向右匹配,非贪婪匹配,截取并保留右边的内容 txt='123456abc123456' echo ${txt#*34} # 56abc123456 ${var##str} 从 ...
- Xen们和Open Stack们
1.虚拟化技术:XEN.KVM.ESXI 2.虚拟化管理:Eucalyptus, OpenNebula, OpenStack, OpenQRM, XenServer, Oracle VM, Cloud ...
- 【hadoop】在eclipse上运行WordCount的操作过程
序:本以为今天花点时间将WordCount例子完全理解到,但高估自己了,更别说我只是在大学选修一学期的java,之后再也没碰过java语言了 总的来说,从宏观上能理解具体的程序思路,但具体到每个代码有 ...