malloc()与calloc区别
1.分配内存空间函数malloc
调用形式: (类型说明符) malloc (size) 功能:在内存的动态存储区中分配一块长度为”size” 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型, 函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。
2.分配内存空间函数 calloc
calloc 也用于分配内存空间。调用形式: (类型说明符)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符)用于强制类型转换。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。
malloc它允许从空间内存池中分配内存,malloc()的参数是一个指定所需字节数的整数.
例如:P=(int*)malloc(n*sizeof(int));
colloc与malloc类似,但是主要的区别是存储在已分配的内存空间中的值默认为0,使用malloc时,已分配的内存中可以是任意的值.
colloc需要两个参数,第一个是需要分配内存的变量的个数,第二个是每个变量的大小.
函数原型不同:
void malloc(unsigned size)//动态申请size个字节的内存空间;功能:在内存的动态存储区中分配一块长度为” size” 字节的连续区域。函数的返回值为该区域的首地址。。(类型说明符)表示把返回值强制转换为该类型指针。
(void *)calloc(unsigned n,unsigned size)// 用于向系统动态申请n个, 每个占size个字节的内存空间; 并把分配的内存全都初始化为零值。函数的返回值为该区域的首地址
(void *)realloc(void *p,unsigned size)//将指针p所指向的已分配内存区的大小改为size
区别:两者都是动态分配内存。主要的不同是malloc不初始化分配的内存,已分配的内存中可以是任意的值. calloc 初始化已分配的内存为0。次要的不同是calloc返回的是一个数组,而malloc返回的是一个对象。
malloc它允许从空间内存池中分配内存, malloc()的参数是一个指定所需字节数的整数.
例如:P=(int*)malloc(n*sizeof(int));
colloc与malloc类似, colloc需要两个参数,第一个是需要分配内存的变量的个数, 第二个是每个变量的大小.
例如:P=(int*)colloc(n,sizeof(int));
例,申请一个字符大小的指针
char p=(char )malloc(sizeof(char)); //当然单个是没有什么意义的申请动态数组或一个结构,如
char str=(char )malloc(sizeof(char)*100); //相当于静态字符数组str[100],但大小可以更改的
typedef struct pointer
{ int data;
struct pointer *p;
} pp;
pp p=(pp )malloc(sizeof(struct pointer)); //动态申请结构体空间
void *malloc( size_t size ); //分配的大小
void *calloc( size_t numElements, size_t sizeOfElement ); // 分配元素的个数和每个元素的大小
共同点就是:它们返回的是 void * 类型,也就是说如果我们要为int或者其他类型的数据分配空间必须显式强制转换;
不同点是:用malloc分配存储空间时,必须由我们计算需要的字节数。如果想要分配5个int型的空间,那就是说需要5*sizeof(int)的内存空间:
int * ip_a;
ip_a = (int*)malloc( sizeof (int) * 5 );
而用calloc就不需要这么计算了,直接:
ip_a = ( int* )calloc( 5, sizeof(int) );这样,就分配了相应的空间,而他们之间最大的区别就是:用malloc只分配空间不初始化,也就是依然保留着这段内存里的数据,而calloc则进行了初始化,calloc分配的空间全部初始化为0,这样就避免了可能的一些数据错误。
先写段代码体验体验….
include
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<
malloc()与calloc区别相关推荐
- malloc()与calloc区别【转】
转自:http://blog.csdn.net/firecityplans/article/details/4490124/ 版权声明:本文为博主原创文章,未经博主允许不得转载. Both the m ...
- malloc 和 calloc的区别?
函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别.malloc()函数有一个参数,即要分配的内存空间的大小:void *malloc(size_t size);call ...
- malloc与calloc的区别
malloc()与calloc() C语言跟内存分配方式 1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. ...
- malloc()和calloc()有啥区别
malloc和calloc函数在参数百个数.初始化内存空间.函数返回值上有区别: 1.参数个数上的区别: malloc函数:malloc(size_t size)函数有一个参数,即要度分配的内存空间的 ...
- malloc和calloc之间的区别?
做的有什么区别: ptr = (char **) malloc (MAXELEMS * sizeof(char *)); 要么: ptr = (char **) calloc (MAXELEMS, s ...
- alloc()、malloc()、calloc()、realloc()区别及用法
C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等. 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别. ...
- calloc() 和malloc() 有什么区别?
calloc() 和malloc() 有什么区别?利用calloc 的零填充功能安全吗?free() 可以释放calloc() 分配的内存吗, 还是需要一个cfree()? calloc(m, n) ...
- kmalloc、vmalloc、malloc、calloc的区别
1.kmalloc和vmalloc是分配的是内核的内存,malloc.calloc分配的是用户的内存; 2.kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续, ...
- C99 calloc、malloc和realloc区别
2018-01-26 创建人:Ruo_Xiao 参考文档:C99标准 邮箱:xclsoftware@163.com 一.共同点 均来自头文件:stdlib.h 分配的内存都是连续的. 返回值为void ...
最新文章
- HBuilder 的快捷键
- 【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO
- arcgis python工具-使用python制作ArcGIS插件(1)工具介绍
- 【集合论】卡氏积 ( 卡氏积概念 | 卡氏积示例 | 卡氏积性质 | 非交换性 | 非结合性 | 分配律 | 有序对为空 | n 维卡氏积 | n 维卡氏积个数 | n维卡氏积性质 )
- 201771010102 常惠琢 《2018面向对象程序设计(Java)》第9周学习总结
- 【Tools】VNC Viewer 6.20安装详解
- [转载] java语言程序设计-基础篇
- 因策划进军餐饮等虚假营销 TikTok前营销主管被开除
- c语言代码题及答案,c语言编程题精选及答案
- 在div 底部显示背景图片
- 让cat命令有颜色得输出文件(ccat)
- db4o java_DB4O 社区版 8.1.3 发布,面向对象数据库
- 网站安全检测:8款非常有用的免费 Web 安全测试工具
- 微信开发:账号申请,AppID、AppSecret 获取方式
- python中英文时间转换
- (一百二十三)Android O 了解wifi eap中的anonymous identity
- 每日3词 2021-03-08 【reference】【print】【coding】
- Python 核心编程(第二版)——网络编程
- 机房收费系统—软件需求说明书
- 靶场复现————平行越权、垂直越权
热门文章
- 企业如何对付DDoS***
- Dev的多语言简单实现
- 【读书笔记】.NET本质论第四章-Programming with Type(Part Two)
- sphinx文档_使用Sphinx构建自定义文档工作流
- web字体设置成平方字体_探索免费和开放的Web字体
- efk使用_如何使用EFK创建开源堆栈
- 评选 cms_十大评选和编辑精选:12月评论
- 第二十九章:学校招生
- 提升财运必看!运势不好的原因,竟然和这些数字有关?(已有近10万人提升了财运)...
- CSS3 变换/变形(transform)