realloc 函数的使用
realloc 函数的使用
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void setVal(char *tmp,int qs,int num,char mm)
{
for(int i=qs;i<num-;i++)
{
*(tmp+i)=mm;
}
*(tmp+num-)='\0';
}
int main()
{
char *p,*q; //缩短内存
p = (char * ) malloc ();
setVal(p,,,'a');
q = (char *) realloc (p,);
if(q!=NULL)
{
setVal(q,,,'S');
cout<<q<<endl;
cout<<"Success"<<endl;
}
else
{
setVal(p,,,'F');
cout<<"Fail"<<endl;
}
free(q);
getchar();
getchar();
system("pause");
return ;
}
realloc 可以对给定的指针所指的空间进行扩大或者缩小,原有内存的中内容将保持不变。当然,对于缩小,则被缩小的那一部分的内容会丢失。
realloc 并不保证调整后的内存空间和原来的内存空间保持同一内存地址。相反,realloc 返回的指针很可能指向一个新的地址:
因为realloc是从堆上分配内存的,当扩大一块内存空间时, realloc直接从堆上现存的数据后面的那些字节中获得附加的字节;但如果数据后面的字节不够的话,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上。
在代码中,
如果我们采用i = (int*)realloc(i, 2*sizeof(int))的重新分配内存方式,有以下两种情况:
1.分配成功,返回void*指针:realloc返回值如果与前面malloc的值不同,那么realloc函数完成后,i指向的旧内存自动free掉。
2.分配失败,返回NULL值:此时,i原来指向的内存还没有被free掉,而现在又找不到地址,这样就出现memory leak了。
解决办法:定义另一个指针j用于接收realloc返回值,判断是否成功,成功则将j赋给i
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/leopardaa521/archive/2009/10/12/4658887.aspx
realloc 函数的使用的更多相关文章
- 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 ...
- realloc()函数
原型:extern void *realloc(void *mem_address, unsigned int newsize); 参数: mem_address: 要改变内存大小的指针名 newsi ...
随机推荐
- MySQL 权限?
一.权限表 mysql数据库中的3个权限表:user .db. host 权限表的存取过程是: 1)先从user表中的host. user. password这3个字段中判断连接的IP.用户名.密码是 ...
- mfc开发问题_v1
1. 设置对话框按钮背景图片? 首先,设置对话框按钮的属性为Bitmap,然后导入资源文件(一个你需要作为背景的小图片),最后在该对话框类的OnInitDialog函数中添加如下代码: //设置对话框 ...
- eclipse 注释模板设置
方法注释模板 /** * @title ${enclosing_method} * @description ${todo} * ${tags} ${return_type} * @Date ${da ...
- 在VM虚拟机中安装centos7
- groupBy
public List groupBy(List list,String flag,String... sortName) throws Exception{ Map<String,List&l ...
- 安装oracle pl/sql developer
1.在官网上下载oracle 11g R2版本的数据库,直接常规安装.数据库可以下载32bit. 2.在这里下载oracle client (32bit)http://www.oracle.com/t ...
- Git 个人/团队项目的创建(一步一图)
好吧,不能从简书上直接拷贝过来,所以这里如果有想了解的就直接去我的简书吧. 简书地址
- 下载和安装cocoaPods
ios中一些三方的库用的cocoaPods管理.管理三方库非常的方便 简单说一下安装步骤 1.sudo gem install cocoapods2.gem sources --remove http ...
- C# Unix时间戳转换为时间
在做一些接口的时候,比如返回数据中有一个时间的属性,它的值是使用Unix时间戳表示的,当我们处理它(保存到本地或者格式化前台展示)时需要转换成日期时间,在此就需要根据时间戳转换为日期时间 (注:Uni ...
- Codevs 2776 寻找代表元(二分图匹配)
2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号. 广州二 ...