将内存扩大缩小的函数 realloc(){}
来源:互联网 发布:软件开发工作计划模板 编辑:程序博客网 时间:2024/04/29 11:20
realloc 用过很多次了。无非就是将已经存在的一块内存扩大。
char* p = malloc(1024);
char* q = realloc(p,2048);
现在的问题是我们应该如何处理指针 p。 刚开始按照我最直观的理解,如果就是直接将 p = NULL;。 到最后只需要释放 q的空间就可以了。
因为最近在做个封装。结果在做单元测试的时候发现。有时候我在 free(q); 的时候会出错。这样我就郁闷了。
后来仔细一跟踪,发现 realloc 完以后 q 和 p 的指针地址是一样。不过有时候又不一样。
仔细查了下资料。得到如下信息:
1.如果 当前连续内存块足够 realloc 的话,只是将p所指向的空间扩大,并返回p的指针地址。 这个时候 q 和 p 指向的地址是一样的。
2.如果 当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p指向的内容 copy到 q,返回 q。并将p所指向的内存空间删除。
这样也就是说 realloc 有时候会产生一个新的内存地址 有的时候不会。所以在分配完成后。我们需要判断下 p 是否等于 q。并做相应的处理。
这里有点要注意的是要避免 p = realloc(p,2048); 这种写法。有可能会造成 realloc 分配失败后,p原先所指向的内存地址丢失。
-----------------------------------------------------------------------前面摘自参考链接-----------------------------------------------------------------------------
我想用realloc来分配的缩小记忆体空间,我用下面的程序测试,运行正确,它会自动删掉10236-10245之间的空间,可是多添一个0就会出现段错误。
希望大家能帮我解惑。
1 #include<stdio.h>
2 #include<stdlib.h>
3 main()
4 {
5 int i,N,M;
6 double *P;
7 N=10245;
8 M=10235;
9 P=(double*)malloc(N*sizeof(double));
10 for(i=0;i<N;i++)
11 P[i]=(double)i+(double)i/10;
12 P=realloc(P,M);
13 for(i=0;i<M;i++)
14 printf(" %lf \n",Q[i]);
15
16 }
参考链接:http://www.cnblogs.com/ren54/archive/2008/11/20/1337545.html
- 将内存扩大缩小的函数 realloc(){}
- 扩大矩形函数和缩小矩形函数的用法
- 内存分配——realloc()函数的使用
- 内存分配——realloc()函数的使用
- 内存分配——realloc()函数的使用
- 关于内存分配函数realloc()的思考
- 内存操作函数:realloc
- 内存分配函数---realloc
- LVM的扩大与缩小 (转)
- 扩大Eclipse的内存
- c中内存分配与释放(malloc,realloc,calloc,free)函数内容的整理
- malloc,calloc,realloc内存分配函数的区别
- malloc、calloc、realloc、alloca几个内存分配函数的区别
- 内存分配函数malloc、calloc、realloc的区别
- 内存堆分配操作函数的使用(realloc,malloc等)
- 内存分配函数:malloc/calloc/realloc的区别
- 动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
- 动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
- Cocos2d-x博客
- 学习笔记-隐藏键盘的一个方法例子
- 一个毕业6年的程序员工作经历和成长感悟(下)
- 过剩数
- 某大型银行深化系统之二十一:Log4j执行性能
- 将内存扩大缩小的函数 realloc(){}
- Hadoop源码分析笔记(一):Hadoop Configuration详解
- 四种解析XML文档的方法详解(介绍+优缺点比较+示例)
- myeclipse8.6安装svn插件
- 路径查找脚本pathfind (shell)
- 网络异步请求(1)
- MFC中鼠标事件=onMouse
- 计算日志中的时间段重合时间差,适合时长计算
- Windows 8.1(Windows Blue)新特性