#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-1;i++)
 {
  *(tmp+i)=mm;
 }
 *(tmp+num-1)='\0';
}
int main()
{
 char  *p,*q;

//缩短内存
 p = (char * ) malloc (1000);
 setVal(p,0,1000,'a');
 q = (char *) realloc (p,800);
 if(q!=NULL)
 {
  setVal(q,795,800,'S');
  cout<<q<<endl;
  cout<<"Success"<<endl;  
 }
 else
 {
  setVal(p,500,800,'F');
  cout<<"Fail"<<endl;
 } 
 free(q);
 getchar();
 getchar();
 system("pause");
 return 0;
}

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

文章来自:http://blog.csdn.net/leopardaa521/archive/2009/10/12/4658887.aspx

realloc函数的使用相关推荐

  1. C中堆管理—浅谈malloc,free,calloc,realloc函数之间的区别

    2019独角兽企业重金招聘Python工程师标准>>> 在进行C/C++编程的时候,需要程序员对内存的了解比较好清楚,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由 ...

  2. realloc函数引发的慘案

    帮别人调试个程序,程序的功能主要涉及动态数组.实现动态数组元素的加入,删除,查找.显示功能.可是在运行加入功能的时候,连续运行三次加入的时候就会出现故障,让人感到很的莫名其妙. 涉及到的函数例如以下所 ...

  3. realloc函数在使用上要注意什么问题

    realloc函数在使用上要注意什么问题 这个函数的作用是重新分配空间大小,返回的头指针不变,只是改变空间大小.既然是改变,就有变大.变小和为什么改变的问题.变大,要注意不能大到内存溢出:变小,那变小 ...

  4. calloc、malloc、realloc函数的区别及用法

    calloc.malloc.realloc函数的区别及用法! 三者都是分配内存,都是stdlib.h库里的函数,但是也存在一些差异. (1)malloc函数.其原型void *malloc(unsig ...

  5. 浅谈malloc,calloc,realloc函数之间的区别

    内存区域可以分为栈,堆,静态存储区和常量存储区.局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取的方式都是由编译器自动执行的. C 标准函数库提供了许多函数来实现对堆上内存管理,其中包括:m ...

  6. C语言 realloc函数 带着内存游走的函数

    realloc函数 realloc函数,带着内存游走的函数. 该函数将 ptr 指向的内存大小修改为size.内存中的数据从开头到size保留不变. 如果size大于原内存大小,则多出的部分会被初始化 ...

  7. realloc函_[转载]realloc函数的使用及注意事项(转)

    原型:extern void *realloc(void *mem_address, unsigned int newsize); 用法:#include 功能:改变mem_address所指内存区域 ...

  8. c++ 栈中如何给string malloc空间_malloc,free,calloc,realloc函数

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

  9. C语言动态申请内存空间之malloc(),calloc(),realloc()函数

    在C语言中用于动态申请内存空间的函数主要为malloc()函数,calloc()函数,以及realloc()函数,以下主要介绍三个函数的用法,区别以及使用时的注意事项. malloc(),calloc ...

  10. realloc函数和malloc函数区别

    relloac函数 1.relloc函数会将原有空间的数据拷贝到新的空间 2.realloc函数会释放原有空间的内存 3.底层使用malloc函数实现 用法(以栈的增容为例) bool Cap_Inc ...

最新文章

  1. 学会JavaScript函数式编程(第1部分)
  2. kuangbin带我飞QAQ DLX之一脸懵逼
  3. 【LeetCode笔记】543. 二叉树的直径(Java、dfs、二叉树)
  4. QTCreator2.8.0+Qt Open source 4.8.5环境配置(Win7x64)
  5. span 超出部分换行
  6. 一个demo学会c#
  7. 斐讯音箱控制扫地机器人_轻松解决家务难题 斐讯大能扫地机器人X3
  8. vite Unrestricted file system access to
  9. 前端js计算抽奖概率
  10. 程序员常用英文单词汇总
  11. 武汉大学计算机学院李明,第一届全国SLAM技术论坛在浙江大学成功举办
  12. 苏宁易购按关键字搜索suning商品 API 返回值说明
  13. 横向打印二叉树 java_按树状横向打印二叉树
  14. 主键约束(PRIMARY KEY, PK)
  15. window.scrollTo滚动
  16. mysql left join含义_left join是什么意思
  17. echarts绘制3D地图
  18. js除法四舍五入保留小数点后两位写法
  19. 涂鸦智能2021年Q1营收5690万美元:亏损规模扩大,已跌破发行价
  20. 小米笔记本计算机在哪里,小米笔记本proX15怎么查看电脑损耗程度-在哪查看

热门文章

  1. 能源危机,你可以不用过于担心
  2. 抖音的兴趣电商已经碰到流量天花板?
  3. w7拨号连接关不掉解决方法
  4. tortoisegit 还原文件到某个版本
  5. ActionScript移动项目组件开发(1):可滚动的容器
  6. root后手机开发者模式
  7. excel将一个工作表根据条件拆分成多个工作表
  8. php查询后并导出excel,PHP如何将查询结束导出Excel
  9. Flutter Android 序列号
  10. 解决npm install 报gyp 或者python问题