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) 动态开辟多少个字节的内存空间,返回该空间的起始地址:且开辟的空间使用方法,类似于数组,是一块连续 ...
最新文章
- 手动脱壳—dump与重建输入表(转)
- zabbix监控系统客户端安装
- PHP 模拟真实ip,PHP实现-获取用户的真实IP
- ngzorro html源码,Angular 中 ngTemplateOutlet 的用法以及ng-zorro源码分析!
- 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0
- photoshop cc_如何使用Photoshop CC将图片变成卡通
- win10计算器rsh_Win10 内置计算器评测:PowerShell 很靠谱
- Python爬虫解析网页的4种方式 值得收藏
- 方舟手游服务器设置文件翻译,方舟手游咋设置翻译
- 【转】灵活运用 SQL SERVER FOR XML PATH
- 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 路由(二)之分库分表路由...
- AX2012 R3 Data upgrade checklist sync database step, failed to create a session;
- JSON字符串,JSON对象的相互转换
- 数学建模工具篇(一)-LaTeX软件入门
- python 使用word转pdf遇到的问题
- 如何在 R 中的直方图上叠加正态曲线(2 个示例)
- 如何快速更换证件照背景颜色
- 数学建模常用算法案例k—means聚类分析
- Win11打开控制面板的方法
- CSS:个人常用搜索框样式
热门文章
- web developer tips (1):创建、管理、应用样式表的强大工具
- syslog可能引起得问题_牙齿经常有问题?可能是这4个坏习惯引起的,要改正
- linux的vi命令详解,Linux上Vi命令详解
- php 函数变量的顺序,PHP实现参数的自定义顺序调用 | 剑花烟雨江南
- java比较时间sql_如何正确比较日期 java.sql.Date
- python while break try 无法中断_解码不能正常工作并且while循环不能正确中断python...
- 属性被分为八大类不包括_Python语言---私有属性
- mysql中distinct关键字,MySQL关键字Distinct的详细介绍
- python使用多线程写生成器_Python学习——多线程,异步IO,生成器,协程
- 力扣35. 搜索插入位置