malloc,calloc,realloc
与堆操作相关的两个函数
malloc
#include<stdio.h>
#include<stdlib.h>
#include<string.h> int main()
{
char *p = malloc(); //内存随机,未做处理 int i;
for(i = ; i < : i++)
{
printf(“%d “,p[i]);
}
free(p);
return ;
}
运行结果:(linux)
exbot@ubuntu:~/wangqinghe/C/20190630$ ./malloc
0 0 0 0 0 0 0 0 0 0
全是0表示分配的这块内存没有用过。
相同的代码在windows环境下运行必须将
char *p = malloc(10);换成 char *p = (char*)malloc(10);
因为malloc分配的地址是指向void*
不更换过来会报 invalid conversion from ‘void*’ to ‘char*’ 的错误
换过后的运行结果如下:

可以在使用malloc之后使用memset函数来初始化该指针指向的地址大小为0或者-1.(memset)只能初始化这两种值。
char *p = malloc(10);
memset(p,0,10); //初始化所有内存为0
calloc
calloc函数可以直接达成这样的效果:分配内存并且同时初始化为0
#include<stdio.h>
#include<stdlib.h>
#include<string.h> int main()
{
//char *p = malloc(10);
char *p = (char*)calloc(,sizeof(char));
int i;
for(i = ; i < ; i++)
{
printf("%d ",p[i]);
}
free(p);
return ;
}

realloc
想要将两个分配的内存块在一起,可以使用realloc函数
在原有内存基础之上,在堆中间增加连续的内存。
如果原有内存没有连续内存可扩展,那么会重新分配一个空间,将原有的内存copy到新空间,然后释放。
#include<stdio.h>
#include<stdlib.h>
#include<string.h> int main()
{
char *p1 = (char*)calloc(,sizeof(char));
char *p2 = (char*)realloc(p1,);
int i;
for(i = ; i < ; i++)
{
printf("%d ",p2[i]);
}
free(p2);
return ;
}
在p1内存的基础上扩充,并且会自动初始化p1内存大小的内存为0;
若p2内存分配大小大于p1,那么多出来的内存则会有随机值。
char *p2 = (char*)realloc(NULL,10) //等同于malloc;
realloc和malloc只分配内存,不处理。
malloc,calloc,realloc的更多相关文章
- malloc,calloc,realloc,alloc
三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...
- malloc,calloc,realloc函数用法,原理及不同解析
https://blog.csdn.net/lixungogogo/article/details/50887028 一.malloc malloc在MSDN中原型为: void *malloc( s ...
- 【C/C++开发】malloc,calloc和realloc的区别和注意事项
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量. <2&g ...
- 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...
- Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解
C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...
- C语言 malloc、calloc、realloc的区别
三个函数的申明分别是: void* malloc(unsigned size); void* realloc(void* ptr, unsigned newsize); void* calloc(si ...
- malloc、calloc、realloc的区别
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...
- malloc、calloc、realloc三者的差别
1.malloc 作用:分配内存块 原型:void *malloc(size_t size);size表示要分配的字节数 返回值:返回一个指向所分配空间的void指针,假设没有足够的内存可用,则返回N ...
- C/C++中的malloc、calloc和realloc
1. malloc 原型:extern void *malloc(unsigned int num_bytes); 头文件:Visual C++6.0中可以用malloc.h或者stdlib.h 功能 ...
随机推荐
- jquery的offset().top与javascript的offsetTop区别?
offset().top是jquery的方法,需引入jquery,它获取你绑定元素上边框相对于html上边界的偏移量 offsetTop是原生js的方法,它获取你绑定元素上边框相对于离自己最近且pos ...
- Spring 中的bean 是线程安全的吗?
结论: 不是线程安全的 Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体sco ...
- oracle存储过程临时表
接到一个以前领导的需求,说的大概意思是: 如果能关联上就取关联上的最大值更新到表里,没有关联上的就取原来的值. 写一个存储过程,这正好用到了临时表,上网查询,用的太乱了,特别记录. 准备阶段 创建PD ...
- 解决xshell小键盘输入时串码(干货!!)
点击文件——属性 点击终端,修改为Linux即可
- Linux学习篇之OpenKM的安装(汉化)
OpenKM是一个开放源代码的电子文档管理系统,它的特点是可用于大型公司或是中小企业, 适应性比较强. 并且在知识管理方面的加工,提供了更加灵活和成本较低的替代应用,下面讲一下搭建方法. 一.以下都是 ...
- U-boot新手入门,烧写进mini2440
拿到一块开发板,首先就要找到它的资料,当然了,开发板的厂商或者代理商会提供资料,资料里会有你需要的. 比如我的这块mini2440,在友善之臂代理商提供的资料里面,就有我们这篇所需要的 把这个文件夹下 ...
- 时序数据库influxDB存储数据grafana展示数据
一.influxDB简介 InfluxDB是一款用Go语言编写的开源分布式时序.事件和指标数据库,无需外部依赖.该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metri ...
- 11jsp
1.JSP 1. 指令 作用:用于配置JSP页面,导入资源文件 格式: <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> 分类: ...
- [牛客] [#1108 J] [树形结构] 买一送一
2019牛客国庆集训派对day3 链接:https://ac.nowcoder.com/acm/contest/1108/J来源:牛客网 题意 ICPCCamp 有 n 个商店,用 $1,2,..., ...
- The Multilinear Structure of ReLU Networks
两种非常常见的非线性单元:rectified linear units (ReLUs) 和 leaky ReLUs 我们选取binary hinge loss进行二分类 对于多分类,我们可以定义mul ...