与堆操作相关的两个函数

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相关推荐

  1. 【C/C++】内存分配函数:malloc,calloc,realloc,_alloca

    [C/C++]内存分配函数:malloc,calloc,realloc,_alloca malloc: 原型:extern void *malloc(unsigned int num_bytes); ...

  2. C语言动态内存开辟详解(malloc,calloc,realloc,free,柔型数组)

    目录 一.概述 二.相关库函数的使用 1.malloc 2.calloc malloc vs. calloc 异同 3.free的使用 4.realloc 三.易错点 四.C\C++程序的内存开辟规则 ...

  3. 动态内存分布——malloc,calloc,realloc,free的使用。以及关于动态内存的常见错误。

    我们知道内存的使用方式,可以在栈区,静态区,堆区,申请空间来储存变量. 但是他们这些内存区所存储的东西是不一样的. 局部变量 函数的形式参数 栈区 动态内存分配申请的空间 malloc,calloc, ...

  4. malloc、calloc、realloc和free

    C 语言中开辟动态内存的有三个函数,分别为 malloc,calloc,realloc,释放内存的只有一个函数 free. realloc的使用是最容易犯错的,在写这篇博客前老师让我把realloc的 ...

  5. malloc、calloc、realloc、free、malloc_trim

    文章目录 malloc.calloc.realloc.free new和delete memset和memcpy malloc_trim() malloc.calloc.realloc.free ma ...

  6. C语言-动态内存管理(malloc()、calloc()、realloc()、free())

    C语言 动态内存分配 文章目录 C语言 动态内存分配 前言 一.为什么存在动态内存分配? 二.动态内存函数的介绍 1.初识malloc()和free() 2.malloc()和free()的简单使用 ...

  7. 详解malloc,calloc,realloc原理及其模拟实现

    malloc原理 malloc它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足 用户请求所需要的内存块.然后,将该内存块一分为二(一块的 ...

  8. malloc、calloc、realloc的区别

    (1)C语言跟内存分配方式 <1>从静态存储区域分配.        内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量. <2&g ...

  9. malloc、calloc、realloc和alloca各种的区别

    需要先包含头文件 #include"malloc.h" malloc是标准的在堆中开辟新的空间 比如 char *pt=(char *)malloc(10*sizeof(char) ...

  10. 动态内存管理 - malloc、calloc、realloc、柔性数组

    目录 一.为什么存在动态内存分配 二.动态内存函数的介绍 1.1 malloc 1.2 free 1) 动态开辟多少个字节的内存空间,返回该空间的起始地址:且开辟的空间使用方法,类似于数组,是一块连续 ...

最新文章

  1. 手动脱壳—dump与重建输入表(转)
  2. zabbix监控系统客户端安装
  3. PHP 模拟真实ip,PHP实现-获取用户的真实IP
  4. ngzorro html源码,Angular 中 ngTemplateOutlet 的用法以及ng-zorro源码分析!
  5. 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0
  6. photoshop cc_如何使用Photoshop CC将图片变成卡通
  7. win10计算器rsh_Win10 内置计算器评测:PowerShell 很靠谱
  8. Python爬虫解析网页的4种方式 值得收藏
  9. 方舟手游服务器设置文件翻译,方舟手游咋设置翻译
  10. 【转】灵活运用 SQL SERVER FOR XML PATH
  11. 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 路由(二)之分库分表路由...
  12. AX2012 R3 Data upgrade checklist sync database step, failed to create a session;
  13. JSON字符串,JSON对象的相互转换
  14. 数学建模工具篇(一)-LaTeX软件入门
  15. python 使用word转pdf遇到的问题
  16. 如何在 R 中的直方图上叠加正态曲线(2 个示例)
  17. 如何快速更换证件照背景颜色
  18. 数学建模常用算法案例k—means聚类分析
  19. Win11打开控制面板的方法
  20. CSS:个人常用搜索框样式

热门文章

  1. web developer tips (1):创建、管理、应用样式表的强大工具
  2. syslog可能引起得问题_牙齿经常有问题?可能是这4个坏习惯引起的,要改正
  3. linux的vi命令详解,Linux上Vi命令详解
  4. php 函数变量的顺序,PHP实现参数的自定义顺序调用 | 剑花烟雨江南
  5. java比较时间sql_如何正确比较日期 java.sql.Date
  6. python while break try 无法中断_解码不能正常工作并且while循环不能正确中断python...
  7. 属性被分为八大类不包括_Python语言---私有属性
  8. mysql中distinct关键字,MySQL关键字Distinct的详细介绍
  9. python使用多线程写生成器_Python学习——多线程,异步IO,生成器,协程
  10. 力扣35. 搜索插入位置