malloc怎么使用,请举例说明,谢谢!

我在自学C语言,这个东西看不懂,请感受帮帮忙啊!... 我在自学C语言,这个东西看不懂,请感受帮帮忙啊! 展开
 我来答
大野瘦子
高粉答主

推荐于2019-10-12 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:33.9万
展开全部

malloc使用须要包括头文件:

#include 'stdlib.h'

例如:

int *p;

p = new int;  /返回类型为int* 类型(整数型指针)。分配大小为 sizeof(int);

或:

int* parr;

parr = new int [100];   //返回类型为 int* 类枣高型(整数型指针)。分配大小为 sizeof(int) * 100;

而 malloc 则必须由我们计算要字节数,而且在返回后强行转换为实际类型的指针。

int* p;

p = (int *) malloc (sizeof(int));

扩展资料:

malloc 函数返回的是 void * 类型。

对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。

所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,养成强制转换的习惯。

在Linux中可以有这样:malloc(0),这是因为Linux中malloc有一个下限值16Bytes,注意malloc(-1)是禁止的;但是在某些系统中是不允许malloc(0)的。

在规范的程序中我们有必要按照这样的格式去使用malloc及free:

type *p;

if(NULL == (p = 穗岩茄(type*)malloc(sizeof(type))))

/*请使用if来判猜察断,这是有必要的*/

{

perror("error...");

exit(1);

}

.../*其它代码*/

free(p);

p = NULL;/*请加上这句*/
灵德
2024-11-19 广告
由化工方面的博士、教授和企业的高级技术人员与管理人员创建的高科技化工企业。主要从事下列产品的开发、生产和相关的技术服务:▼高纯电子化学品(主要为高纯季铵碱 )▼季铵碱系列▼季铵盐系列▼季膦化合物系列▼相转移催化剂(PTC)▼均苯四甲酸 (P... 点击进入详情页
本回答由灵德提供
戢飞雨0G8
推荐于2017-10-03 · TA获得超过112个赞
知道答主
回答量:27
采纳率:0%
帮助的人:0
展开全部
malloc 原型:extern void *malloc(unsigned int num_bytes);
用法:#include <malloc.h>
或#include<stdlib.h>
功能:分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
malloc的语法是:指针名=(数据类型*)malloc(长度),(数据类型*)表示指针.
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
动态内存分配就是指在程序执行的过程中凯茄动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。本文简单介绍动态内存分配函数malloc()及几种实现方法。
1. 简介
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。还有一点必须注意的是,当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。
2. 函数说明
C语言的动态存储管理由一组标准库函数实现,其原型在标准文件<stdlib.h>里描述,需要用这些功能时应包含这个文件。与动态存储分配有关的函数共有四个,其中就包括存储分配函数malloc()。函数原型是:void *malloc (size_t n);这里的size_t是标准库里定义的一个类型,它是一个无符号整型。这个整型能够满足所有对存储块大小描述的需要,具体相当于哪个整型由具体的C系统确定。malloc的返回值为(void *)类型(这是通用指针的一个握孙兆重要用途),它分配一片能存放大小为n的数据的存储块,返回对应的指针值;如果不能满足申请(找不到能段租满足要求的存储块)就返回NULL。在使用时,应该把malloc的返回值转换到特定指针类型,赋给一个指针。
注意,虽然这里的存储块是通过动态分配得到的,但是它的大小也是确定的,同样不允许越界使用。例如上面程序段分配的块里能存n个双精度数据,随后的使用就必须在这个范围内进行。越界使用动态分配的存储块,尤其是越界赋值,可能引起非常严重的后果,通常会破坏程序的运行系统,可能造成本程序或者整个计算机系统垮台。
下例是一个动态分配的例子:
#include <stdio.h>
#include<stdlib.h>
main()
{
int count,*array; /*count是一个计数器,array是一个整型指针,也可以理解为指向一个整型数组的首地址*/
count=100;
if((array=(int *)malloc(10*sizeof(int))) == NULL)
{
printf("不能成功分配存储空间。");
exit(1);
}
for(count=0;count<10;count++) /*给数组赋值*/
array[count]=count;
for(count=0;count<10;count++) /*打印数组元素*/
printf("%2d",array[count]);
}
上例中动态分配了10个整型存储区域,然后进行赋值并打印。例中if((array=(int *) malloc (10*sizeof(int)))==NULL)语句可以分为以下几步:
1)分配10个整型的连续存储空间,并返回一个指向其起始地址的整型指针
2)把此整型指针地址赋给array
3)检测返回值是否为NULL
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
si...r@163.com
2009-10-09 · TA获得超过711个赞
知道小有建树答主
回答量:665
采纳率:0%
帮助的人:394万
展开全部
char *p,
p=(char*)malloc(char)
是申请一个动态单慎芦元的函数
原形是void * malloc(单元大小)
返回值是一个指针,是个地址
单元大小可以是2,3,4,随便写,与具体环境有关
例如,struct num{int i,long j;}*p;
你就可以这样写p=(struct num* )malloc(sizeof(struct student))就是分雹友配一源孝槐个大小为sizeof(struct student )的单元给指针p
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
想爱你而又不能
2009-10-08 · TA获得超过1477个赞
知道小有建树答主
回答量:276
采纳率:0%
帮助的人:224万
展开全部
申请动态内存
char型的:
char* ch = (char*)malloc(sizeof(char)*n)
里面n为你要申请的字裂轮节个数
int型的:
int* nNum = (int*)malloc(sizeof(int)*n)
里面n为你要申请的每四字节的个数肆旦信迟闭。
用完后最后要free(ch)掉你申请的内存空间,以免内存泄漏
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
倦戏9
高粉答主

2020-05-11 · 繁杂信息太多,你要学会辨别
知道答主
回答量:5.6万
采纳率:32%
帮助的人:2733万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式