malloc,calloc,realloc
与堆操作相关的两个函数
malloc
#include<stdio.h> #include<stdlib.h> #include<string.h>int main() {char *p = malloc(10); //内存随机,未做处理int i;for(i = 0; i < 10: i++){printf(“%d “,p[i]);} free(p);return 0; }
运行结果:(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(10,sizeof(char));int i;for(i = 0; i < 10; i++){printf("%d ",p[i]);}free(p);return 0; }
realloc
想要将两个分配的内存块在一起,可以使用realloc函数
在原有内存基础之上,在堆中间增加连续的内存。
如果原有内存没有连续内存可扩展,那么会重新分配一个空间,将原有的内存copy到新空间,然后释放。
#include<stdio.h> #include<stdlib.h> #include<string.h>int main() {char *p1 = (char*)calloc(10,sizeof(char));char *p2 = (char*)realloc(p1,10);int i;for(i = 0; i < 20; i++){printf("%d ",p2[i]);}free(p2);return 0; }
在p1内存的基础上扩充,并且会自动初始化p1内存大小的内存为0;
若p2内存分配大小大于p1,那么多出来的内存则会有随机值。
char *p2 = (char*)realloc(NULL,10) //等同于malloc;
realloc和malloc只分配内存,不处理。
转载于:https://www.cnblogs.com/wanghao-boke/p/11109453.html
malloc,calloc,realloc相关推荐
- 【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
[C/C++]内存分配函数:malloc,calloc,realloc,_alloca malloc: 原型:extern void *malloc(unsigned int num_bytes); ...
- C语言动态内存开辟详解(malloc,calloc,realloc,free,柔型数组)
目录 一.概述 二.相关库函数的使用 1.malloc 2.calloc malloc vs. calloc 异同 3.free的使用 4.realloc 三.易错点 四.C\C++程序的内存开辟规则 ...
- 动态内存分布——malloc,calloc,realloc,free的使用。以及关于动态内存的常见错误。
我们知道内存的使用方式,可以在栈区,静态区,堆区,申请空间来储存变量. 但是他们这些内存区所存储的东西是不一样的. 局部变量 函数的形式参数 栈区 动态内存分配申请的空间 malloc,calloc, ...
- malloc、calloc、realloc和free
C 语言中开辟动态内存的有三个函数,分别为 malloc,calloc,realloc,释放内存的只有一个函数 free. realloc的使用是最容易犯错的,在写这篇博客前老师让我把realloc的 ...
- malloc、calloc、realloc、free、malloc_trim
文章目录 malloc.calloc.realloc.free new和delete memset和memcpy malloc_trim() malloc.calloc.realloc.free ma ...
- C语言-动态内存管理(malloc()、calloc()、realloc()、free())
C语言 动态内存分配 文章目录 C语言 动态内存分配 前言 一.为什么存在动态内存分配? 二.动态内存函数的介绍 1.初识malloc()和free() 2.malloc()和free()的简单使用 ...
- 详解malloc,calloc,realloc原理及其模拟实现
malloc原理 malloc它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足 用户请求所需要的内存块.然后,将该内存块一分为二(一块的 ...
- malloc、calloc、realloc的区别
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量. <2&g ...
- malloc、calloc、realloc和alloca各种的区别
需要先包含头文件 #include"malloc.h" malloc是标准的在堆中开辟新的空间 比如 char *pt=(char *)malloc(10*sizeof(char) ...
- 动态内存管理 - malloc、calloc、realloc、柔性数组
目录 一.为什么存在动态内存分配 二.动态内存函数的介绍 1.1 malloc 1.2 free 1) 动态开辟多少个字节的内存空间,返回该空间的起始地址:且开辟的空间使用方法,类似于数组,是一块连续 ...
最新文章
- Java 集合——List集合
- java中的equals方法
- 解惑解释性语言与编译性语言
- 【Python CheckiO 题解】Date and Time Converter
- 平时的鸿星尔克VS开挂后的鸿星尔克
- C++设计模式-解释器模式
- (24)FPGA开发必备(FPGA不积跬步101)
- Android 中的Binder跨进程通信机制与AIDL
- 智能网联汽车云控系统第2部分:车云数据交互规范
- 图解OAuth 2.0协议族(一):授权码 auth code
- 宝藏软件:“小狼毫” 一款开源牛叉输入法
- 支持wmv、mpg、mov、avi格式的网页视频播放代码
- C语言基础学习day04
- Mac锁屏 设置快捷键
- WINVER 和 _WIN32_WINNT
- Tableau长期免费使用的方法总结(包括Tableau Public,Tableau Desktop,Tableau Pre,Tableau eLearning)
- shell实现文本处理详解
- fabric QA
- DOSBox0.74的显示大小问题(调整分辨率)
- 使用新版IDEA创建JavaWeb项目详细图文教程
热门文章
- [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】
- 要想能安心,必须先死心。
- [转载]FPGA/CPLD重要设计思想及工程应用(时序及同步设计)
- [转]“UPA 中国”北京行业聚会笔录
- mysql集群重启offline_mysql集群搭建问题及解决方法集锦
- puppet enc mysql_精通Puppet配置管理工具
- 怎么查看MySQL 源码编译了什么_Mysql 源码编译教程贴
- 虐杀外星人java,逆天游戏《毁灭全人类2》登PS4 外星人疯狂虐杀地球人
- because the following virtual functions are pure within
- C语言技巧:把单一元素的数组放在末尾,struct可以拥有可变大小的数组