基本概念

C语言的标准内存分配函数:malloc,calloc,realloc,free等。
malloc与calloc的区别为1块与n块的区别:
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域,返回首地址。
realloc调用形式为(类型*)realloc(ptr,size):将ptr内存大小增大到size。
free的调用形式为free(void
ptr):释放ptr所指向的一块内存空间。

C++中为new/delete函数。

作用

它们都是动态分配内存,

函数调用形式

先看看它们的原型:

void *malloc( size_t size ); //分配的大小void *calloc( size_t numElements, size_t sizeOfElement ); // 分配元素的个数和每个元素的大小

异同

共同点就是:

  • 都为了分配存储空间,
  • 它们返回的是 void * 类型,也就是说如果我们要为int或者其他类型的数据分配空间必须显式强制转换;

不同点是:

  • malloc一个形参,因此如果是数组,必须由我们计算需要的字节总数作为形参传递
    malloc只分配空间不初始化,也就是依然保留着这段内存里的数据,
  • calloc 2个形参 ,因此如果是数组,需要传递个数和数据类型
    而calloc则进行了初始化,calloc分配的空间全部初始化为0,这样就避免了可能的一些数据错误。

eg

想要分配5个int型的空间,那就是说需要5*sizeof(int)的内存空间


int * ip_a;
ip_a = (int*)malloc( sizeof (int) * 5 );

而用calloc就不需要这么计算了,直接:

ip_a = ( int* )calloc( 5, sizeof(int) );

这样,就分配了相应的空间,

c++ test code

#include <iostream>
#include<stdlib.h>using namespace std;void main()
{int * ip_a;
int * ip_b;ip_a = (int*)malloc( sizeof (int) * 5 );
for( int i = 0; i < 5; i++ )
{cin>>ip_a[i];
}
for( int j = 0; j < 5; j++ )
{cout<<ip_a[j]<<" ";//c 输出格式//printf("%d ",ip_a[j]);
}ip_b = ( int* )calloc( 5, sizeof(int) );
for( int j = 0; j < 5; j++ )
{cout<<ip_b[j]<<" ";
}}

C CODE

#include <stdio.h>
#include <stdlib.h>int main()
{int i, n;int *a;printf("要输入的元素个数:");scanf("%d",&n);a = (int*)calloc(n, sizeof(int));printf("输入 %d 个数字:\n",n);for( i=0 ; i < n ; i++ ) {scanf("%d",&a[i]);}printf("输入的数字为:");for( i=0 ; i < n ; i++ ) {printf("%d ",a[i]);}free (a);  // 释放内存return(0);
}

malloc,calloc区别相关推荐

  1. Linux中brk()系统调用,sbrk(),mmap(),malloc(),calloc()的异同【转】

    转自:http://blog.csdn.net/kobbee9/article/details/7397010 brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: ...

  2. 内存分布malloc/calloc/realloc/free/new/delete、内存泄露、String模板、浅拷贝与深拷贝以及模拟string类的实现

    内存分布 一.C语言中的动态内存管理方式:malloc/calloc/realloc和free 1.malloc: 从堆上获得指定字节的内存空间,函数声明:void *malloc (int n); ...

  3. 动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间

    动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间 1. 动态内存申请的底层系统调用 动态内存申请函数根据申请的内存大小选择不同的系统调用,小于128K选择brk系 ...

  4. C语言动态申请内存空间之malloc(),calloc(),realloc()函数

    在C语言中用于动态申请内存空间的函数主要为malloc()函数,calloc()函数,以及realloc()函数,以下主要介绍三个函数的用法,区别以及使用时的注意事项. malloc(),calloc ...

  5. c语言malloc,calloc,realloc函数介绍

    malloc,calloc,realloc动态内存管理函数的出现解决了在某些c语言标准中不能使用变长数组的问题 这三个函数的使用需要头文件stdlib.h,这些函数开辟的空间在堆区,系统不会自动释放, ...

  6. C语言 malloc calloc realloc

    1.malloc        void *malloc(size_t size);        void free(void *ptr); 2.calloc void *calloc(size_t ...

  7. malloc/calloc/realloc

    malloc/calloc/realloc和free介绍: malloc函数 malloc函数可以从堆上获得指定字节的内存空间,其函数声明如下: void * malloc(int n); 参数释义: ...

  8. malloc calloc realloc 三兄弟!!!

    学习过C语言的都知道 malloc calloc realloc 这三个函数,这三个函数都是用于动态的分配内存的,最后都要使用 free函数进行释放. 这三个函数的头文件 : stdlib.h 在li ...

  9. c语言释放内存函数,【C语言】内存分配函数malloc/ calloc/ realloc及内存释放free

    前言: 内存区域划分与分配: 1.栈区(stack)--程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等,程序结束时由编译器自动释放. 2.堆区(heap) -- 在内存开辟另一块存储区域 ...

  10. malloc calloc realloc的对比

    函数原型 三个函数的声明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* call ...

最新文章

  1. Mobileye 自动驾驶策略(一)
  2. C#中Base64之编码,解码方法
  3. Ubuntu Docker安装
  4. Oracle--序列和触发器的使用
  5. ad19pcb所有元件都在报错_PLC的线圈输出和置复位,可以混用吗?很多人都会犯这个错误!...
  6. C#回调函数的简单讲解与应用例子
  7. 数字IC设计经典书籍
  8. java使用http代理访问服务器
  9. 点击某些按钮不要触发验证控件
  10. 想做产品经理,产品经理培训靠谱吗?
  11. 使用CyberController来将旧手机改造成电脑外挂------手机交互翻译、人脸解锁、语音识别....各个功能等你来探索
  12. Redis集群的节点通信原理
  13. Jupyter Notebook:内核似乎挂掉
  14. afc系统线路中心计算机系统,青岛地铁线网AFC系统建设探讨
  15. 特斯拉中国召回近5万辆Model S和X,美国法务:中国驾驶员使用不当-1
  16. POJ:3276-Face The Right Way(线性反转)
  17. 关于NullPointerException的小实例
  18. [机器学习]三行代码快速划分交叉训练中训练集和验证集
  19. 大数据真的很牛B吗?不不不,10分钟让你读懂它
  20. 【String】字符串中是否有空格(indexOf、split)

热门文章

  1. k8s系列(二)——云计算相关概念
  2. 尝试解析DDS格式纹理文件的基本信息(不包括图像数据)
  3. 视频后期剪辑,怎样在视频画面上添加滚动字幕
  4. Stata: 正则表达式和文本分析
  5. 【51单片机】 利用定时器产生生日快乐歌
  6. On-board Diagnostic(OBD)
  7. 【Android Tricks 6】ViewPager首页与尾页的滑动动作响应
  8. 【观察】阿里云栖大会究竟好在哪里?
  9. 正弦波的生成及混频器
  10. android+像素转换工具,MCPE像素画生成器