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 功能 ...
随机推荐
- python list 中extend()与append()区别
def changextend(str): "print string with extend" mylist.extend([40,50,60]); print(mylist) ...
- jquery的ajax方法使用application/json出现400错误码的解决方案
400说明是客户端错误,将contentType默认的application/x-www-form-urlencoded改成application/json就出现错误,说明传输的数据不是JSON. 解 ...
- Lock Puzzle CodeForces - 936C (构造)
大意: 给定字符串$s$,$t$, 每次操作可以将$S=AB$变为$S=B^RA$, 要求$3n$次操作内将$s$变为$t$. #include <iostream> #include & ...
- 提升scrapy的爬取效率
增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100. 降低日志级别 ...
- jQuery操作选中select下拉框的值
js和jQuery联合操作dom真的很好用,如果不是专业前端人员的话,我觉得吧前端语言只要熟练掌握js和jQuery就可以了. 获取select下拉框的几种情况如下: 1.获取第一个option的值 ...
- vue组件之事件
自定义事件 通过prop属性,父组件可以向子组件传递数据,而子组件的自定义事件就是用来将内部的数据报告给父组件的. <div id="app3"> <my-com ...
- Java分布式锁三种实现方案
方案一:数据库乐观锁 乐观锁通常实现基于数据版本(version)的记录机制实现的,比如有一张红包表(t_bonus),有一个字段(left_count)记录礼物的剩余个数,用户每领取一个奖品,对应的 ...
- redis集群启动和关闭脚本
创建startall.sh /usr/local/redis/bin/redis-server /usr/local/redis/redis-cluster/7001/redis.conf /usr/ ...
- Jenkins 入门系列--Jenkins 的安装配置
写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之--03PDF文档下载 第二章 Jenkins安装与配置 2 Jenkins安装 在最简单的情况下,J ...
- DP问题练习2:网格路径数量计算问题
DP问题练习2:网格路径数量计算问题 问题描述 有一个机器人的位于一个 m × n 个网格左上角. 机器人每一时刻只能向下或者向右移动一步.机器人试图达到网格的右下角. 问有多少条不同的路径? 样例: ...