前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c语言malloc函数的用法和意义

c语言malloc函数的用法和意义

作者头像
全栈程序员站长
发布2022-08-11 17:51:37
1.1K0
发布2022-08-11 17:51:37
举报

大家好,又见面了,我是你们的朋友全栈君。

当我们需要做一个成绩管理系统,人数可能为全校学生,也可能为一个班的学生,当我们开辟一个班的数组大小时,如果要存储整个学校的人数时,会出现内存不够用的情况;当我们开辟全校人数大小的数组时,输入一个班人数的大小时,会出现内存浪费的情况。 为了应对上述问题,我们引入malloc函数。 malloc时动态内存分配函数,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址

malloc函数原型

代码语言:javascript
复制
extern void *malloc(unsigned int num_bytes);

意为分配长度为num_bytes字节的内存块

malloc函数头文件

代码语言:javascript
复制
#include<malloc.h>

malloc函数返回值

如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

malloc函数使用注意事项

malloc函数的返回的是无类型指针,在使用时一定要强制转换为所需要的类型。 **(敲黑板)重点:在使用malloc开辟空间时,使用完成一定要释放空间,如果不释放会造内存泄漏。 在使用malloc函数开辟的空间中,不要进行指针的移动,因为一旦移动之后可能出现申请的空间和释放空间大小的不匹配

malloc函数使用形式

关于malloc所开辟空间类型:malloc只开辟空间,不进行类型检查,只是在使用的时候进行类型的强转。 举个例子:‘我’开辟你所需要大小的字节大小空间,至于怎么使用是你的事 mallo函数返回的实际是一个无类型指针,必须在其前面加上指针类型强制转换才可以使用 指针自身 = (指针类型*)malloc(sizeof(指针类型)*数据数量)

代码语言:javascript
复制
	int *p = NULL;
	int n = 10;
	p = (int *)malloc(sizeof(int)*n);

在使用malloc函数之前我们一定要计算字节数,malloc开辟的是用户所需求的字节数大小的空间。 如果多次申请空间那么系统是如何做到空间的不重复使用呢? 在使用malloc开辟一段空间之后,系统会在这段空间之前做一个标记(0或1),当malloc函数开辟空间如果遇到标记为0就在此开辟,如果为1说明此空间正在被使用。

free函数

作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间。 注意:使用后该指针变量一定要重新指向NULL,防止悬空指针(失效指针)出现,有效规避错误操作。

代码语言:javascript
复制
int main()
{
	int *p = (int *)malloc(sizeof(int));
	*p = 100;
	free(p);
	p = NULL;
	return 0;

free函数在释放空间之后,把内存前的标志变为0,且为了防止数据泄露,它会把所释放的空间用cd进行填充。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130564.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • malloc函数原型
  • malloc函数头文件
  • malloc函数返回值
  • malloc函数使用注意事项
  • malloc函数使用形式
  • free函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档